Linode Kubernetes 使用入门
本文介绍了使用三个 Linode 节点搭建 Kubernetes 集群的入门教程。它假设你已经搭建好了一个 kubernetes master,以及两个 worker nodes。
- 文章从 pods 的一句话简介开始:Pod 是对外暴露同一个服务的一个/多个容器组成的逻辑实体,共享网络和存储;操作 Pod 的时候,其中的容器会当作一个组一起被启动或停止。
- 使用 YAML 创建 Deployment,有了这个应用才能部署到集群中。
kubectl create -f nginx.yaml --record
创建部署,record 可以记录后续的部署变更。kubectl get deployments
查看部署。kubectl get pods
查看 pods。kubectl scale deployment nginx-server --replicas=8
可以扩容,同理可以调小数字缩容。kubectl set image deployment/nginx-server nginx=nginx:1.13.8-alpine
可以替换镜像实现滚动升级。k8s 保证 pod 中有 25% 的容器运行,并且删掉前一定会新建出来一个。kubectl rollout status deployment/nginx-server
查看滚动升级的进度kubectl describe pod $YOUR_POD
^ 或者直接查看 pod 的描述。- 如果卡住了或者升级失败,需要 ctrl-c, 不会波及正在运行的程序。
kubectl rollout undo deployment/nginx-server
可以滚来滚去kubectl rollout undo deployment/nginx-server --to-revision=1
可以滚一丢丢
- 使用 YAML 新建 Service,有了这个部署的应用才能被外部访问到。
kubectl create -f nginx-service.yaml
yaml 文件中要声明 port 的指定关系。kubectl get services
查看所有服务。一般这时候用 curl 可以看到服务部署成功了么。
- 使用 YAML 新建 namespace,使用它可以将服务从属于一个命名空间,方便做 dev / staging / prod 等环境的区隔。
- 使用 namespace 的话,kubectl 操作需要有 上下文,可以用
kubectl config current-context
配置 context kubectl config set-context dev --namespace=development --cluster=kubernetes --user=kubernetes-admin
可以添加 contextkubectl config use-context dev
切换 context。
- 使用 namespace 的话,kubectl 操作需要有 上下文,可以用
kubectl get nodes
:节点可以算 k8s 中的顶级领域模型了。kubectl cordon kube-worker-2
使用 cordon 避免新的 pods 在某个节点上创建kubectl drain kube-worker-2 --ignore-daemonsets
之后,我们可以用 drain 逐步关停其上的服务。- 当维护操作结束后,
kubectl uncordon kube-worker-2
重新加回来。