kubernetes 官方提供了非常好的交互学习平台 https://kubernetes.io/docs/tutorials/ ,这篇文章是当作一个命令参考,毕竟这些命令不常用,容易忘。
基本概念
Cluster 集群,一个集群里有一个 Master 和数个 Node
Node 通常拿一台物理机座位图一个 Node,也可以用虚拟机
Pod 是一个 docker 实例,一个 Node 里有一个或多个 Pod
Deployment 一个发布,可以包含一个或多个 Pod
Service deployment 暴露出来的服务,内置了负载分发
创建集群 1 2 3 4 5 minikube start $ kubectl get nodes NAME STATUS ROLES AGE VERSION minikube Ready <none> 19s v1.10.0
发布应用 1 2 3 4 5 6 7 8 $ kubectl run kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1 --port=8080 deployment.apps/kubernetes-bootcamp created $ kubectl get deployments NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE kubernetes-bootcamp 1 1 1 1 50s $ kubectl proxy
查看应用 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 $ kubectl get pods NAME READY STATUS RESTARTS AGE kubernetes-bootcamp-5c69669756-85r9w 0/1 Pending 0 1s $ kubectl describe pods Name: kubernetes-bootcamp-5c69669756-85r9w Namespace: default Node: minikube/172.17.0.11 Start Time: Wed, 05 Dec 2018 05:55:14 +0000 Labels: pod-template-hash=1725225312 run=kubernetes-bootcamp Annotations: <none> Status: Running IP: 172.18.0.4 Controlled By: ReplicaSet/kubernetes-bootcamp-5c69669756 Containers: kubernetes-bootcamp: Container ID: docker://a7a117005de01756ff3eb0800b91ef089810db413961c86d14fdf9cd8c451754 Image: gcr.io/google-samples/kubernetes-bootcamp:v1 Image ID: docker-pullable://gcr.io/google-samples/kubernetes-bootcamp@sha256:0d6b8ee63bb57c5f5b6156f446b3bc3b3c143d233037f3a2f00e279c8fcc64af Port: 8080/TCP Host Port: 0/TCP State: Running . . . $ kubectl logs kubernetes-bootcamp-5c69669756-85r9w $ kubectl exec kubernetes-bootcamp-5c69669756-85r9w env $ kubectl exec -ti kubernetes-bootcamp-5c69669756-85r9w bash
暴露应用 创建服务 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 $ kubectl expose deployment/kubernetes-bootcamp --type ="NodePort" --port 8080 $ kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 5m kubernetes-bootcamp NodePort 10.102.235.226 <none> 8080:32115/TCP 4m $ kubectl describe services/kubernetes-bootcamp Name: kubernetes-bootcamp Namespace: default Labels: run=kubernetes-bootcamp Annotations: <none> Selector: run=kubernetes-bootcamp Type: NodePort IP: 10.102.235.226 Port: <unset > 8080/TCP TargetPort: 8080/TCP NodePort: <unset > 32115/TCP Endpoints: 172.18.0.4:8080 Session Affinity: None External Traffic Policy: Cluster Events: <none> $curl 172.17.0.49:32115 Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-5c69669756-hh4k7 | v=1
使用 label 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 $ kubectl describe deployment Name: kubernetes-bootcamp Namespace: default CreationTimestamp: Wed, 05 Dec 2018 06:07:06 +0000 Labels: run=kubernetes-bootcamp Annotations: deployment.kubernetes.io/revision=1 Selector: run=kubernetes-bootcamp Replicas: 1 desired | 1 updated | 1 total | 1 available | 0 unavailable StrategyType: RollingUpdate MinReadySeconds: 0 RollingUpdateStrategy: 25% max unavailable, 25% max surge Pod Template: Labels: run=kubernetes-bootcamp Containers: kubernetes-bootcamp: Image: gcr.io/google-samples/kubernetes-bootcamp:v1 Port: 8080/TCP . . . $ kubectl get pods -l run=kubernetes-bootcamp $ kubectl get services -l run=kubernetes-bootcamp $ kubectl label pod $POD_NAME app=v1
删除 services 1 $ kubectl delete service -l run=kubernetes-bootcamp
删除 services 只会删除转发,其对应的 pod 还在运行,还可以用 kubectl exec 进行交互
扩展应用 扩展发布 1 2 3 4 5 6 7 8 9 10 11 12 $ kubectl scale deployments/kubernetes-bootcamp --replicas=4 $ kubectl get deployments NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE kubernetes-bootcamp 4 4 4 4 3m $ kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE kubernetes-bootcamp-5c69669756-4lzwf 1/1 Running 0 2m 172.18.0.7 minikube kubernetes-bootcamp-5c69669756-hbrb8 1/1 Running 0 3m 172.18.0.3 minikube kubernetes-bootcamp-5c69669756-rr92t 1/1 Running 0 2m 172.18.0.6 minikube kubernetes-bootcamp-5c69669756-z4ld6 1/1 Running 0 2m 172.18.0.5 minikube
缩减发布 1 $ kubectl scale deployments/kubernetes-bootcamp --replicas=2
更新应用 替换镜像 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 $ kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2 $ kubectl rollout status deployments/kubernetes-bootcamp deployment "kubernetes-bootcamp" successfully rolled out $ kubectl describe pods Name: kubernetes-bootcamp-7799cbcb86-prj8w Namespace: default Node: minikube/172.17.0.81 Start Time: Wed, 05 Dec 2018 06:33:29 +0000 Labels: pod-template-hash=3355767642 run=kubernetes-bootcamp Annotations: <none> Status: Running IP: 172.18.0.9 Controlled By: ReplicaSet/kubernetes-bootcamp-7799cbcb86 Containers: kubernetes-bootcamp: Container ID: docker://76d31785dc318d21ba1c822c64f24c7f58701dfe761d2c1cb8df03002d568732 Image: jocatalin/kubernetes-bootcamp:v2 Image ID: docker-pullable://jocatalin/kubernetes-bootcamp@sha256:fb1a3ced00cecfc1f83f18ab5cd14199e30adc1b49aa4244f5d65ad3f5feb2a5 . . .
回滚 1 $ kubectl rollout undo deployments/kubernetes-bootcamp