本文描述一个用Kubernetes搭建的简单集群的单service案例,基本来源于慕课网。本案例包含两台主机共个节点,结构如下图所示。
一、安装
安装过程参考:https://github.com/gjmzj/kubeasz/blob/master/docs/quickStart.md
其中,针对第三步的安装,需要将“ssh-copy-id $IP”替换为:
cat id_rsa.pub >> /root/.ssh/authorized_keys
同时,在hosts中将[kube-node]设置为本机ip,将[kube-node]设置为slave节点的ip。这样就将本机指定为了集群的master节点。
安装完成后,通过"ssh 本机ip"登录本机,就可以进行各种操作了。
通过get nodes操作获取集群节点信息。
kubectl get nodes
用get pods操作查看集群的pod是否都正常运行:
kubectl get pods --all-namespaces
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 describe service,可以发现在endpoints栏增加了新创建的两个pod的ip地址。
这时,从本机或者从机访问本机或者从机的ip地址的30008端口的hello路由,都可以看到输出了hello, kubernetes!的字样:
curl [本机ip或从机ip]:30008/hello
3.监控pod运行情况
通过kubectl get pods命令,可以查看到刚创建的pod信息。发现两个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)