4.1 Kubernetes 部署利器: kubeadm

4.1.1 kubeadm 的工作原理
直接在宿主机上运行kubelet,然后使用容器部署其他Kubemetes组件。
所以’使用kubeadm的第一步’是在机器上手动安装kubeadm` kubelet和kubectl这3个二进制文件°
4.1.2 kubernetes init 的工作流程
Preflight Checks:

- 生成证书
- 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 的工作流程

4.1.4 配置 kubeadm 的部署参数
建议写在文件中:
$ kubeadm init --config kubeadm.yaml
4.2 从0到1: 搭建一个完整的 Kubernetes 集群
1. 第一步: 安装 kubeadm 和 Docker
这步参考官网就行.
2.第二步: 部署 Kubernetes 的 Master 节点
$ kubeadm init --config kubeadm.yaml


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

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

5. 第五步: 通过 Taint/Toleration 调整 Master 执行 Pod 的策略
加上污点:
$ kubectl taint nodes node1 foo=bar:NoSchedule
声明 toleration:

检查 master 上的 taint 字段:
- key 为 node-role.kubernetes.io/master

配置容忍 master taint 的 pod yaml:

如果只是单节点 Kubernetes, 那么删除 taint 才是正确选择:
-移除所有以 node-role.kubernetes.io/master 为键的 taint
$ kubectl taint nodes --all node-role.kubernetes.io/master-
6. 部署 Dashboard 可视化插件

如果要从集群外访问 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:

安装完, 服务器压力上升了 (哭脸)
看一下跑了啥:
$ kubectl get pods -n rook-ceph
4.3 第一个 Kubernetes 应用
kubernetes 推荐使用指定 yaml 文件的方式启动 pod:

- 像这样使用一种API对象(Deployment)管理另—种API对象(Pod)的方法’在Kubemetes中叫作“控制器模式,(controller pattem)
- 与 Labels 同级的 Annotations 用于携带 kubernetes 感兴趣的内部信息
运行该 yaml:
$ kubectl create -f nginx-deployment.yaml
检查这个 pod:

升级镜像版本:

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

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

pod 滚动更新过程:

删除 deployment:
$ kubectl delete -f nginx-deployment.yaml
