《深入剖析Kubernetes - 09  从容器到容器云 谈谈Kubernetes的本质》


1. 在所有节点上安装 Docker 和 kubeadm;

$ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
$ cat  
  


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 提供的数据卷。