《深入剖析Kubernetes - 09 从容器到容器云 谈谈Kubernetes的本质》
1. 在所有节点上安装 Docker 和 kubeadm;
$ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - $ cat </etc/apt/sources.list.d/kubernetes.list deb http://apt.kubernetes.io/ kubernetes-xenial main EOF $ apt-get update $ apt-get install -y docker.io kubeadm
2. 部署 Kubernetes Master;
配置可以在kubeadm.yaml 里面修改kubeadm
$ kubeadm init --config kubeadm.yaml
首次创建集群,需要手动执行以下操作
$ mkdir -p $HOME/.kube $ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config $ sudo chown $(id -u):$(id -g) $HOME/.kube/config
该目录用来保存生成的安全配置文件
部署完成后会生成这样一行指令
kubeadm join 10.168.0.2:6443 --token 00bwbx.uvnaa2ewjflwu1ry --discovery-token-ca-cert-hash sha256:00eb62a2a6020f94132e3fe1ab721349bbcd3e9b94da9654cfe15f2985ebd711
3. 部署容器网络插件;
以weave 为例
$ kubectl apply -f https://git.io/weave-kube-1.6 $ kubectl get pods -n kube-system NAME READY STATUS RESTARTS AGE coredns-78fcdf6894-j9s52 1/1 Running 0 1d coredns-78fcdf6894-jm4wf 1/1 Running 0 1d etcd-master 1/1 Running 0 9s kube-apiserver-master 1/1 Running 0 9s kube-controller-manager-master 1/1 Running 0 9s kube-proxy-xbd47 1/1 Running 0 1d kube-scheduler-master 1/1 Running 0 9s weave-net-cmk27 2/2 Running 0 19s
4. 部署 Kubernetes Worker;
(1) 安装kubeadm 和 docker
(2) 执行 kubeadm join
执行安装master时生成的join指令
kubeadm join 10.168.0.2:6443 --token 00bwbx.uvnaa2ewjflwu1ry --discovery-token-ca-cert-hash sha256:00eb62a2a6020f94132e3fe1ab721349bbcd3e9b94da9654cfe15f2985ebd711
至此单机版kubernetes集群已经部署完毕,但默认条件下,master节点不允许调度pod,kubernetes 通过污点/容忍(taint / toleration)实现这个限制
$ kubectl taint nodes node1 foo=bar:NoSchedule
设置这个污点只对新创建的pod生效,对于已经运行在node 上面的pod不影响,即不会驱逐已有pod
toleration 声明如下:
apiVersion: v1 kind: Pod ... spec: tolerations: - key: "foo" operator: "Equal" value: "bar" effect: "NoSchedule"
添加污点后,通过kubectl describe node 可以看到该配置
$ kubectl describe node master Name: master Roles: master Taints: node-role.kubernetes.io/master:NoSchedule
删除污点
$ kubectl taint nodes --all node-role.kubernetes.io/master-
5. 部署 Dashboard 可视化插件
Dashboard 可以通过容器化部署
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml
查看pod
$ kubectl get pods -n kube-system kubernetes-dashboard-6948bdb78-f67xk 1/1 Running 0 1m
注意:1.7 版本以后,dashboard 只运行集群内访问,避免对外暴露造成安全风险
6. 部署容器存储插件。
Rook 项目是一个基于 Ceph 的 Kubernetes 存储插件(它后期也在加入对更多存储实现的支持)。不过,不同于对 Ceph 的简单封装,Rook 在自己的实现中加入了水平扩展、迁移、灾难备份、监控等大量的企业级功能,使得这个项目变成了一个完整的、生产级别可用的容器存储插件。
仅需要以下2行指令,即可容器化部署rook项目
$ 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/cluster.yaml
服务启动后,即可通过PV 和 PVC的方式挂载ceph 提供的数据卷。