k8s 操作
一些命令:
创建一个 deployment
kubectl run nginx --image=nginx --replicas=2 --port=80
查看 pod
kubectl get pods
查看
kubectl get deployments
删除
kubectl delete deployments nginx
将服务映射到 外网, 官网的说明是
kubectl expose deployment nginx --port=80 --target-port=80 --type=LoadBalancer
--type=LoadBalancer = 外部的 负载均衡器,需要自行添加才能使用。
具体可查看 官网
http://kubernetes.io/docs/user-guide/services/#type-loadbalancer
不指定类型 默认是 'ClusterIP' ClusterIP 类型 只能作为 集群内部访问
而我们需要指定的类型是 NodePort
kubectl expose deployment nginx --target-port=80 --type=NodePort
因为映射的外部端口为随机端口,所以需要查看映射端口:
[root@k8s-master ~]#kubectl describe service nginx |grep NodePort Type: NodePort NodePort: <unset> 30405/TCP
测试: 这里任何一个 node 与 master 都可以使用这个端口访问
curl k8s-master:30405 <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html>
编写一个 pods 的 yaml 文件
apiVersion: v1 kind: Pod metadata: name: nginx labels: app: nginx spec: containers: - name: nginx image: nginx ports: - containerPort: 80
编写一个 RC 的 yaml 文件
apiVersion: v1 kind: ReplicationController metadata: name: nginx-rc spec: replicas: 2 #副本数量2 selector: #通过selector 来筛选要控制的Pod app: nginx #必须与labels 名称相同 template: # Pod 的定义 metadata: labels: # 定义Pod 的标签,必须与selector名称相同 app: nginx name: nginx-pod spec: containers: - name: nginx image: nginx #镜像名称,必须从仓库拉取,本地镜像也必须有私有仓库地址,否则拉取失败。 ports: - containerPort: 80
查看 rc 的情况
[root@k8s-master ~]#kubectl get rc NAME DESIRED CURRENT AGE nginx-rc 2 2 42s
使用
kubectl delete rc nginx-rc
来删除创建的rc
编写一个 Deployment 的 yaml 文件
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 2 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx ports: - containerPort: 80
使用
kubectl create -f nginx.yaml --record
进行创建
--record 参数,是记录后续创建操作,方便问题查找
[root@k8s-master ~]#kubectl get deployments NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE nginx-deployment 2 2 2 1 28s
查看 pods 的情况:
kubectl get pods -l app=nginx
升级 deployment
创建一个新的 yaml 文件。
然后使用
kubectl apply -f nginx_new.yaml
来应用更新
[root@k8s-master ~]#kubectl apply -f nginx_new.yaml deployment "nginx-deployment" configured
对于单个升级我们可以直接用命令升级
[root@k8s-master ~]#kubectl set image deployment/nginx-deployment nginx=nginx:alpine deployment "nginx-deployment" image updated
升级完毕以后查看 rs
[root@k8s-master ~]#kubectl get rs NAME DESIRED CURRENT AGE nginx-deployment-3336418496 2 2 34m nginx-deployment-59027981 0 0 55m
可以看到有两个rs , 这就是作为回滚用的
查看 pod 情况
kubectl get pods -l app=nginx
使用 rollout history 可查看操作的历史记录
[root@k8s-master ~]#kubectl rollout history deployments nginx-deployment deployments "nginx-deployment": REVISION CHANGE-CAUSE 1 kubectl create -f nginx.yaml --record 2 kubectl apply -f nginx_new.yaml
这里可以看到有2条revision. 如果需要回滚,可以使用 --revision 来做回滚。
kubectl rollout history deployments nginx-deployment --revision=2
操作以后既可回滚到 revision 2 的版本上面,像svn 中的版本回滚。
使用
kubectl delete deployments nginx-deployment
来删除一个 deployment