五、部署master节点
1. kubeadm init 初始化master节点
$ kubeadm init --kubernetes-version=v1.13.0 --pod-network-cidr=172.22.0.0/16 --apiserver- advertise-address=192.168.1.11
这里我们定义POD的网段为: 172.22.0.0/16 ,然后api server地址就是master本机IP地址。 2. 初始化成功后,/etc/kubernetes/ 会生成下面文件3. 同时最后会生成一句话 kubeadm join 192.168.1.11:6443 --token zs4s82.r9svwuj78jc3px43 --discovery-token-ca-cert- hash sha256:45063078d23b3e8d33ff1d81e903fac16fe6c8096189600c709e3bf0ce051ae8 这个我们记录下,到时候添加node的时候要用到。
4. 验证测试配置kubectl命令 $ mkdir -p /root/.kube $ cp /etc/kubernetes/admin.conf /root/.kube/config
执行获取pods列表命令,查看相关状态 $ kubectl get pods --all-namespaces 其中coredns pod处于Pending状态,这个先不管。 我们也可以执行 kubectl get cs 查看集群的健康状态:
六、部署calico网络 (在master上执行)
calico 介绍: Calico 是一个纯三层的方案, 其好处是它整合了各种云原生平台(Docker 、Mesos 与OpenStack 等) , 每个 Kubernetes 节点上通过 Linux Kernel 现有的 L3 forwarding 功能来实现vRouter 功能。
1. 下载calico 官方镜像我们这里要下载三个镜像,分别是calico-node:v3.1.4、calico-cni:v3.1.4、calico-typha:v3.1.4 直接运行 docker pull 下载即可 $ docker pull calico/node:v3.1.4 $ docker pull calico/cni:v3.1.4 $ docker pull calico/typha:v3.1.4
2. tag 这三个calico镜像$ docker tag calico/node:v3.1.4 quay.io/calico/node:v3.1.4 $ docker tag calico/cni:v3.1.4 quay.io/calico/cni:v3.1.4 $ docker tag calico/typha:v3.1.4 quay.io/calico/typha:v3.1.4
3. 删除原有镜像$ docker rmi calico/node:v3.1.4$ docker rmi calico/cni:v3.1.4 $ docker rmi calico/typha:v3.1.4
4. 部署calico4.1 下载执行rbac-kdd.yaml文件 $ kubectl apply -f rbac-kdd.yaml
4.2 下载、配置calico.yaml文件
把ConfigMap 下的 typha_service_name 值由none变成 calico-typha 设置 Deployment 类目的 spec 下的replicas值 我们这里设置为 1。
4.3 定义POD网段 我们找到CALICO_IPV4POOL_CIDR,然后值修改成之前定义好的POD网段,我这里是172.22.0.0/16 4.4 开启bird模式 把 CALICO_NETWORKING_BACKEND 值设置为 bird ,这个值是设置BGP网络后端模式 4.5 部署calico.yaml文件 上面参数设置调优完毕,我们执行下面命令彻底部署calico $ kubectl apply -f calico.yaml
查看状态 $ kubectl get pods --all-namespaces 这里calico-typha 没起来,那是因为我们的node 计算节点还没启动和安装。
七、部署node节点
1. 下载安装镜像(在node上执行)node上也是需要下载安装一些镜像的, 需要下载的镜像为: kube-proxy:v1.13 、pause:3.1 、calico- node:v3.1.4、calico-cni:v3.1.4、calico-typha:v3.1.4
1.1 下载镜像 $ docker pull registry.aliyuncs.com/google_containers/kube-proxy:v1.13.0 $ docker pull registry.aliyuncs.com/google_containers/pause:3.1 $ docker pull calico/node:v3.1.4$ docker pull calico/cni:v3.1.4 $ docker pull calico/typha:v3.1.4
$ docker tag registry.aliyuncs.com/google_containers/kube-proxy:v1.13.0 k8s.gcr.io/kube- proxy:v1.13.0 $ docker tag registry.aliyuncs.com/google_containers/pause:3.1 k8s.gcr.io/pause:3.1 $ docker tag calico/node:v3.1.4 quay.io/calico/node:v3.1.4
$ docker tag calico/cni:v3.1.4 quay.io/calico/cni:v3.1.4 $ docker tag calico/typha:v3.1.4 quay.io/calico/typha:v3.1.4
$ docker rmi registry.aliyuncs.com/google_containers/kube-proxy:v1.13.0 $ docker rmi registry.aliyuncs.com/google_containers/pause:3.1 $ docker rmi calico/node:v3.1.4 $ docker rmi calico/cni:v3.1.4 $ docker rmi calico/typha:v3.1.4
1.2. 把node加入集群里 加node计算节点非常简单,在node上运行: $ kubeadm join 192.168.1.11:6443 --token zs4s82.r9svwuj78jc3px43 --discovery-token-ca- cert-hash sha256:45063078d23b3e8d33ff1d81e903fac16fe6c8096189600c709e3bf0ce051ae8
两个节点运行的参数命令一样,运行完后,我们在master节点上运行 kubectl get nodes 命令查看node 是否正常 到此,集群的搭建完成了90%,剩下一个是搭建dashboard。
八、部署dashboard
部署dashboard之前,我们需要生成证书,不然后面会https访问登录不了。
1. 生成私钥和证书签名请求$ mkdir -p /etc/kubernetes/certs $ cd /etc/kubernetes/certs $ openssl genrsa -des3 -passout pass:x -out dashboard.pass.key 2048 $ openssl rsa -passin pass:x -in dashboard.pass.key -out dashboard.key 删除刚才生成的dashboard.pass.key $ rm -rf dashboard.pass.key$ openssl req -new -key dashboard.key -out dashboard.csr 生成了dashboard.csr 生成SSL证书 $ openssl x509 -req -sha256 -days 365 -in dashboard.csr -signkey dashboard.key -out dashboard.crt dashboard.crt文件是适用于仪表板和dashboard.key私钥的证书。
创建secret $ kubectl create secret generic kubernetes-dashboard-certs --from-file=/etc/kubernetes/certs -n kube-system 注意/etc/kubernetes/certs 是之前创建crt、csr、key 证书文件存放的路径
2. 下载dashboard镜像、tag镜像(在全部节点上)$ docker pull registry.cn-hangzhou.aliyuncs.com/kubernete/kubernetes-dashboard- amd64:v1.10.0 $ docker tag registry.cn-hangzhou.aliyuncs.com/kubernete/kubernetes-dashboard- amd64:v1.10.0 k8s.gcr.io/kubernetes-dashboard:v1.10.0 $ docker rmi registry.cn-hangzhou.aliyuncs.com/kubernete/kubernetes-dashboard- amd64:v1.10.0
下载 kubernetes-dashboard.yaml 部署文件(在master上执行) curl https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/k ubernetes-dashboard.yaml -O
修改 kubernetes-dashboard-amd64:v1.10.0 为kubernetes-dashboard:v1.10.0,不然会去墙外下载dashboard镜像 $ sed -i "s/kubernetes-dashboard-amd64:v1.10.0/kubernetes-dashboard:v1.10.0/g" kubernetes-dashboard.yaml
3. 把Secret 注释因为上面我们已经生成了密钥认证了,我们用我们自己生成的。 5. 创建dashboard的pod $ kubectl create -f kubernetes-dashboard.yaml
6. 查看服务运行情况$ kubectl get deployment kubernetes-dashboard -n kube-system$ kubectl --namespace kube- system get pods -o wide $ kubectl get services kubernetes-dashboard -n kube-system $ netstat -ntlp|grep 30005
7. Dashboard BUG处理$ vim kube-dashboard-access.yaml
添加下面内容: apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRoleBinding metadata: name: kubernetes-dashboard labels: k8s-app: kubernetes-dashboard roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: kubernetes-dashboard namespace: kube-system
执行让kube-dashboard-access.yaml 生效 $ kubectl create -f kube-dashboard-access.yaml 然后重新登录界面刷新下,这个问题即可解决。 |