Kubernetes的简单Demo

本文描述一个用Kubernetes搭建的简单集群的单service案例,基本来源于慕课网。为了简便,本案例只包含本机一个节点,结构如下图所示。

一、安装

安装过程参考:https://github.com/gjmzj/kubeasz/blob/master/docs/quickStart.md

其中,第三步的安装需要将“ssh-copy-id $IP”替换为:

cat id_rsa.pub >> /root/.ssh/authorized_keys

在安装的同时,将本机指定为了集群的master节点。

安装完成后,通过"ssh 本机ip"登录本机,就可以进行各种操作了。

通过get node操作获取集群节点信息。

kubectl get node 

get操作还能获得很多其他的集群信息,包括services、pods、deployments等。可以用kubectl get --help查看。

二、部署service

Kubernetes通过yaml文件定义各种对象。部署service也是通过yaml文件进行的。

1.编写hello-service.yaml:

apiVersion: v1
kind: Service
metadata: 
  name: hello-service
spec:
  type: NodePort
  selector: 
    app: hello-k8s-demo
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080
    nodePort: 30008        

上面是配置部署service的一个标准的yaml文件。

apiVersion即文件使用的api版本。

kind即对象的类型(部署service时为Service)。

metadata是元数据,这里规定了service的名称。

spec代表对象的具体属性。

type规定为NodePort时,下面的nodePort需要为节点指定监听的端口。

selector规定了将请求打到具有标签app=hello-k8s-demo的pod上。

最后的ports下面规定了一组port的属性。

port代表service暴露的虚拟端口为80。

targetPort代表后端pod监听在8080端口。

2.创建service

kubectl create命令创建service:

kubectl create -f hello-service.yaml --record=true

这样service就创建成功了。可以用kubectl get service查看刚创建的服务,或者用kubectl describe命令查看详细信息:

kubectl describe service/hello-service

 三、部署Deployment

Kubernetes一般通过部署deployment实现对pod的配置,同样通过yaml文件。

1.编写hello-deployment.yaml文件

apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-deployment
  labels:
    app: hello-k8s-demo
spec:
  replicas: 2
  selector:
    matchLabels:
      app: hello-k8s-demo
  template:
    metadata:
      labels:
        app: hello-k8s-demo
    spec:
      containers:
      - name: hello-k8s
        image: bigwhite/hello-kubernetes-demo:v0.1
        imagePullPolicy: Always
        ports:
        - containerPort: 8080

在metadata中为deployment打上了此应用的标签。

在spec中,规定了replica(即pod的个数)为2。

后面template的意思是,当pod的个数低于前面规定的replica的个数时,要求deployment按照此template创建pod以补全个数。

模板中必须规定label且必须与前面的selector一致。

后面为template定义了容器的信息,即新创建的pod需要封装哪些容器。这里规定了容器的名字、镜像、拉取策略、以及pod暴露的端口。

2.创建deployment

仍然通过kubectl create -f创建deployment。之后可以用kubectl get deployment查看基本信息。

再次运行kubectl get service,可以发现在endpoints栏增加了新创建的两个pod的ip地址。

这时,访问本机ip地址的30008端口的hello路由,可以看到输出了hello, kubernetes的字样:

curl [本虚拟机ip]:30008/hello

3.监控pod运行情况

通过kubectl get pods命令,可以查看到刚创建的pod信息。

将pod的名字复制,使用kubectl logs -f [pod名],可以对pod的状态进行监控。

新建两个窗口,分别对两个pod执行logs操作。多次发送curl请求,可以发现,请求被负载均衡到了两个pod下。

三、扩展pod的数量

修改hello-deployment.yaml文件内容,将replica改为3。

通过kubectl apply -f hello-deployment.yaml命令,使修改生效。

通过get pods查看pod信息,可以发现pod数量已经增加为3个。

四、服务版本升级和回退

修改hello-deployment.yaml文件内容,将镜像版本改为v0.2,通过apply命令使其生效。

在升级过程中,Kubernetes会用新pod逐一替换旧pod。

可以用rollout undo命令对升级进行快速回滚:

kubectl rollout undo deployment/hello-deployment

(主要来源于https://www.imooc.com/learn/978)

猜你喜欢

转载自www.cnblogs.com/00986014w/p/9223614.html