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 可以添加 context
    • kubectl config use-context dev 切换 context。
  • kubectl get nodes:节点可以算 k8s 中的顶级领域模型了。
    • kubectl cordon kube-worker-2 使用 cordon 避免新的 pods 在某个节点上创建
    • kubectl drain kube-worker-2 --ignore-daemonsets 之后,我们可以用 drain 逐步关停其上的服务。
    • 当维护操作结束后,kubectl uncordon kube-worker-2 重新加回来。