K8S: (二)play with k8s 多节点在线部署
- 2019 年 10 月 31 日
- 筆記
一、实验环境
浏览器访问 https://labs.play-with-k8s.com/ 并登陆(可用dockerhub账号直接登录)

点击 +ADD NEW INSTANCE新增第一个实例

二、部署第一个节点
初始化节点,执行
kubeadm init --apiserver-advertise-address $(hostname -i)
kubeadm init和kubeadm join两个命令用于快速构建k8s集群, 执行init 后会自动生成join命令


执行完毕后,记录下kubeadm join命令,后面会在其他节点上执行
kubeadm join 192.168.0.17:6443 --token qglebb.ptn3dqq7n4ebo0zx --discovery-token-ca-cert-hash sha256:23ca463c1fe5db9969af70691c69b79da87665c3ac27f3aa7258995b1d4506be
三、部署其他四个节点
点击 +ADD NEW INSTANCE,继续新增四个实例

在这些实例中分别执行:
kubeadm join 192.168.0.17:6443 --token qglebb.ptn3dqq7n4ebo0zx --discovery-token-ca-cert-hash sha256:23ca463c1fe5db9969af70691c69b79da87665c3ac27f3aa7258995b1d4506be
执行成功的节点的左侧图标会发生变化:

在master节点上执行:
kubectl get nodes
可以看到5个节点已经初步部署完成

此时节点的状态为NotReady,继续在master上部署网络代理:
kubectl apply -n kube-system -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 |tr -d 'n')"

查看节点状态已经为Ready:
kubectl get nodes

四、部署nginx服务
在mater上执行:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/website/master/content/en/examples/application/nginx-app.yaml

每个nginx会自动被部署到node节点中,默认是随机选择3个节点。查看pod状态
kubectl get pods -o wide
pod为Running状态表示部署成功,正常运行中

查看服务状态:
kubectl get svc
可以看到"my-nginx-svc"服务已经启动,内部80端口被映射到了外部30937端口

ss -anlp|grep 30937
30937端口的确被监听,通过kube-proxy网络管理实现

五、开放端口,本机访问
将pod上的80端口暴漏给master节点
kubectl expose deploy/my-nginx --port 80

查看服务地址:
kubectl get svc my-nginx -o go-template --template '{{ .spec.clusterIP }}'
直接对10.100.214.243进行curl访问
curl 10.100.214.243

可以看到nginx的默认欢迎界面,至此在k8s上部署nginx完成
六、可能遇到的问题
- 执行kubectl get pods -o wide发现pod长时间不为Running状态 查看pods部署时的日志,排查相应的错误即可kubectl describe pods
- 命令执行错误,想快速恢复某个节点状态 除master节点外,选中其他节点,点击DELETE删除节点

删除后点击+ADD NEW INSTANCE新增节点后执行前面记录的kubeadm join命令:
kubeadm join 192.168.0.17:6443 --token qglebb.ptn3dqq7n4ebo0zx --discovery-token-ca-cert-hash sha256:23ca463c1fe5db9969af70691c69b79da87665c3ac27f3aa7258995b1d4506be
当前部署3个nginx实例,实际上我们有5个节点,当slave节点失败了之后,直接忽略删除也可以