官方文档:https://v1-13.docs.kubernetes.io/zh/docs/tutorials/kubernetes-basics/
pods生命周期:https://v1-13.docs.kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/
配置: https://v1-13.docs.kubernetes.io/docs/concepts/configuration/
labels: https://v1-13.docs.kubernetes.io/docs/concepts/overview/working-with-objects/labels/
Deployments: https://v1-13.docs.kubernetes.io/docs/concepts/workloads/controllers/deployment/
Services: https://v1-13.docs.kubernetes.io/docs/concepts/services-networking/service/
Scaling: https://v1-13.docs.kubernetes.io/docs/tutorials/kubernetes-basics/scale/scale-intro/
autoscale: https://v1-13.docs.kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/
#查看k8s版本
kubectl version
#查看所有的节点
kubectl get nodes
#获取namespace
kubectl get namespace
#查看namespace为online的pod
kubectl get pods --namespace=online
#部署应用
kubectl run kubernetes-bootcamp --image=jocatalin/kubernetes-bootcamp:v1 --port=8080
#查看部署应用列表
kubectl get deployments --namespace=
#查看所有pod
kubectl get pods --namespace=
#获取执行中的pod并设置成环境变量POD_NAME
export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')
echo Name of the Pod: $POD_NAME
#访问pod
curl http://localhost:8001/api/v1/namespaces/default/pods/$POD_NAME/proxy/
kubectl 故障排查
kubectl get pods --namespace= #查看resources列表
kubectl describe pods --namespace= #查看具体的resources情况
kubectl logs $POD_NAME --namespace= #查看pod里的容器日志
kubectl exec --namespace= #在pod里的容器里执行命令
kubectl exec $POD_NAME env --namespace= #查看pod环境变量
kubectl exec -ti $POD_NAME bash --namespace= #进入pod终端
Service & labels
Service type
类型 | 说明 |
---|---|
ClusterIP | 默认选项,只能集群内部访问 |
NodePort | 使用NAT暴露每个节点的相同端口 并使用<NodeIP>:<NodePort> 方式让集群外部访问 ClusterIP的超集 |
LoadBalancer | 创建负载均衡器分配一个固定的IP NodePort的超集 |
ExternalName | 使用域名解析的CNAME来指定名字或者手动自定名字 不使用proxy 需要v1.7及以上版本的kube-dns |
更多的内容参考: https://v1-13.docs.kubernetes.io/docs/tutorials/services/source-ip/ https://v1-13.docs.kubernetes.io/docs/concepts/services-networking/connect-applications-service/ |
labels
service通过labels把一组pods管理起来。
比如通过labels指定开发、测试、生产环境
比如打版本tag
使用标签分类
#获取service
kubectl get services --namespace=
#指定service type
kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080
#查看指定services信息
kubectl describe services/kubernetes-bootcamp --namespace=
#设置NODE_PORT端口为环境变量
export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}')
echo NODE_PORT=$NODE_PORT
#查看部署情况
kubectl describe deployment --namespace=
#-l根据label查询pods
kubectl get pods -l run=kubernetes-bootcamp --namespace=
#-l根据label查询services
kubectl get services -l run=kubernetes-bootcamp --namespace=
export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')
echo Name of the Pod: $POD_NAME
#设置label,label是key/value对
kubectl label pod $POD_NAME app=v1
#根据label查询pods
kubectl get pods -l app=v1 --namespace=
#删除service
kubectl delete service -l run=kubernetes-bootcamp --namespace=
#pod里执行命令
kubectl exec -ti $POD_NAME curl localhost:8080 --namespace=
扩缩容
kubectl get deployments
#扩容成4个
kubectl scale deployments/kubernetes-bootcamp --replicas=4
#查看pod是否变成4个
kubectl get pods -o wide
#查看deployments详情
kubectl describe deployments/kubernetes-bootcamp
#设置环境变量
export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}')
echo NODE_PORT=$NODE_PORT
#缩容
kubectl scale deployments/kubernetes-bootcamp --replicas=2
滚动升级
#查看deployments
kubectl get deployments
kubectl get pods
kubectl describe pods
#滚动升级
kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2
#查看升级是否成功
kubectl describe services/kubernetes-bootcamp
#查看升级状态
kubectl rollout status deployments/kubernetes-bootcamp
#升级一个不存在的版本,让升级失败。
kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=gcr.io/google-samples/kubernetes-bootcamp:v10
#查看pods是否失败
kubectl get pods
#查看失败日志
kubectl logs $POD_NAME
#回退版本,然后用上面的命令查看是否回退成功
kubectl rollout undo deployments/kubernetes-bootcamp
根据上面的内容部署官网的例子:https://kubernetes.io/docs/tutorials/stateless-application/guestbook/
image 从docker hub 上找,先pull下来
#在有问题的node上执行以下命令 查看问题
journalctl -f -u kubelet