­

K8S: (二)play with k8s 多节点在线部署

  • 2019 年 10 月 31 日
  • 筆記

一、实验环境

浏览器访问 https://labs.play-with-k8s.com/ 并登陆(可用dockerhub账号直接登录)

image.png

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

image.png

二、部署第一个节点

初始化节点,执行

kubeadm init --apiserver-advertise-address $(hostname -i)

kubeadm init和kubeadm join两个命令用于快速构建k8s集群, 执行init 后会自动生成join命令

image.png
image.png

执行完毕后,记录下kubeadm join命令,后面会在其他节点上执行

kubeadm join 192.168.0.17:6443 --token qglebb.ptn3dqq7n4ebo0zx --discovery-token-ca-cert-hash sha256:23ca463c1fe5db9969af70691c69b79da87665c3ac27f3aa7258995b1d4506be

三、部署其他四个节点

点击 +ADD NEW INSTANCE,继续新增四个实例

image.png

在这些实例中分别执行:

kubeadm join 192.168.0.17:6443 --token qglebb.ptn3dqq7n4ebo0zx --discovery-token-ca-cert-hash sha256:23ca463c1fe5db9969af70691c69b79da87665c3ac27f3aa7258995b1d4506be

执行成功的节点的左侧图标会发生变化:

image.png

在master节点上执行:

kubectl get nodes

可以看到5个节点已经初步部署完成

image.png

此时节点的状态为NotReady,继续在master上部署网络代理:

kubectl apply -n kube-system -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 |tr -d 'n')"
image.png

查看节点状态已经为Ready:

kubectl get nodes
image.png

四、部署nginx服务

在mater上执行:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/website/master/content/en/examples/application/nginx-app.yaml
image.png

每个nginx会自动被部署到node节点中,默认是随机选择3个节点。查看pod状态

kubectl get pods -o wide

pod为Running状态表示部署成功,正常运行中

image.png

查看服务状态:

kubectl get svc

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

image.png
ss -anlp|grep 30937

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

image.png

五、开放端口,本机访问

将pod上的80端口暴漏给master节点

kubectl expose deploy/my-nginx --port 80
image.png

查看服务地址:

kubectl get svc my-nginx -o go-template --template '{{ .spec.clusterIP }}'

直接对10.100.214.243进行curl访问

curl 10.100.214.243
image.png

可以看到nginx的默认欢迎界面,至此在k8s上部署nginx完成

六、可能遇到的问题

  1. 执行kubectl get pods -o wide发现pod长时间不为Running状态 查看pods部署时的日志,排查相应的错误即可kubectl describe pods
  2. 命令执行错误,想快速恢复某个节点状态 除master节点外,选中其他节点,点击DELETE删除节点
image.png

删除后点击+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节点失败了之后,直接忽略删除也可以