4.1 Kubernetes 部署利器: kubeadm

image.png

4.1.1 kubeadm 的工作原理

直接在宿主机上运行kubelet,然后使用容器部署其他Kubemetes组件。

所以’使用kubeadm的第一步’是在机器上手动安装kubeadm` kubelet和kubectl这3个二进制文件°

4.1.2 kubernetes init 的工作流程

Preflight Checks:

image.png

  • 生成证书
    • ca.{crt,key}
    • /etc/kubernetes/pki
  • 生成配置文件
    • admin.conf
    • controller-manager.conf
    • kubelet.conf
    • scheduler.conf
    • /etc/kubernetes/
  • 生成 Pod 配置文件 (.yaml)
    • kube-apiserver
    • kube-controller-manager
    • kebe-scheduler
    • etcd
    • /etc/kubernetes/manifests
  • 检查 localhost:6443/healthz 来判断 master 的健康状态
  • 生成 bootstrap token (join node)
  • 将 ca.crt 等 master 节点的重要信息, 通过 ConfigMap 的方式保存到 etcd 中
  • 安装默认插件
    • kube-proxy
    • dns

4.1.3 kubeadm join 的工作流程

image.png

4.1.4 配置 kubeadm 的部署参数

建议写在文件中:

  1. $ kubeadm init --config kubeadm.yaml

4.2 从0到1: 搭建一个完整的 Kubernetes 集群

1. 第一步: 安装 kubeadm 和 Docker

这步参考官网就行.

2.第二步: 部署 Kubernetes 的 Master 节点

$ kubeadm init --config kubeadm.yaml

image.png

image.png

3. 第三步: 部署网络插件

weave:

image.png

4. 第四步: 部署 Kubernetes 的 Worker 节点

仅需两步:

image.png

5. 第五步: 通过 Taint/Toleration 调整 Master 执行 Pod 的策略

加上污点:

$ kubectl taint nodes node1 foo=bar:NoSchedule

声明 toleration:

image.png

检查 master 上的 taint 字段:

  • key 为 node-role.kubernetes.io/master

image.png

配置容忍 master taint 的 pod yaml:

image.png

如果只是单节点 Kubernetes, 那么删除 taint 才是正确选择:

  • - 移除所有以 node-role.kubernetes.io/master 为键的 taint
$ kubectl taint nodes --all node-role.kubernetes.io/master-

6. 部署 Dashboard 可视化插件

image.png

如果要从集群外访问 Dashboard, 需要配置 Ingress.

7. 部署容器存储插件

rook:

$ kubectl apply -f https://raw.githubusercontent.com/rook/rook/master/cluster/examples/kubernetes/ceph/common.yaml
$ kubectl apply -f https://raw.githubusercontent.com/rook/rook/master/cluster/examples/kubernetes/ceph/operator.yaml
$ kubectl apply -f https://raw.githubusercontent.com/rook/rook/master/cluster/examples/kubernetes/ceph/crds.yaml
$ kubectl apply -f https://raw.githubusercontent.com/rook/rook/master/cluster/examples/kubernetes/ceph/cluster.yaml

书中没有第3步, 如果没有该步骤, 当执行第4步时会出错

为什么使用 rook:

image.png

安装完, 服务器压力上升了 (哭脸)

看一下跑了啥:

$ kubectl get pods -n rook-ceph

4.3 第一个 Kubernetes 应用

kubernetes 推荐使用指定 yaml 文件的方式启动 pod:

image.png

  • 像这样使用一种API对象(Deployment)管理另—种API对象(Pod)的方法’在Kubemetes中叫作“控制器模式,(controller pattem)
  • 与 Labels 同级的 Annotations 用于携带 kubernetes 感兴趣的内部信息

运行该 yaml:

$ kubectl create -f nginx-deployment.yaml

检查这个 pod:

image.png

升级镜像版本:

image.png

$ kubectl apply -f nginx-deployment.yaml
  • 这种面向终态的分布式系统设计原则,就被称为』声明式API,,。

使用 Volume:

image.png

  • emptyDir: 实等同于之前讲过的Docker的隐式VOlume参数’即不显式声明宿主机目录的Vblume。

显式 volume 定义:

image.png

pod 滚动更新过程:

image.png

删除 deployment:

$ kubectl delete -f nginx-deployment.yaml