hanshileiai
5/6/2020 - 9:24 AM

k8s - 测试集群:连接 Harbor 私有镜像测试 deployment,pod 部署

1. node节点删除已有镜像

# 镜像查看:
docker images
# 删除已有镜像
docker rmi -f wangyanglinux/myapp:v1
docker rmi -f hub.hsl.com/library/myapp:v1

2. master 节点开始部署 deployment pod

查看已存在 deployment,删除已有 nginx-deployment

kubectl get deployment
kubectl delete deployment nginx-deployment
# deployment.extensions "nginx-deployment" deleted

运行部署镜像

kubectl run nginx-deployment --image=hub.hsl.com/library/myapp:v1 --port=80 --replicas=1
# deployment.apps/nginx-deployment created

查看 deployment

kubectl get deployment
# NAME               READY   UP-TO-DATE   AVAILABLE   AGE
# nginx-deployment   1/1     1            1           21s

查看 replicas: deployment会自动创建 rs

kubectl get rs
# NAME                          DESIRED   CURRENT   READY   AGE
# nginx-deployment-796dd4654b   1         1         1       39s

查看 pods

kubectl get pod -o wide
# NAME                                READY   STATUS    RESTARTS   AGE   IP           NODE         NOMINATED NODE   READINESS GATES
# nginx-deployment-796dd4654b-gjclq   1/1     Running   0          58s   10.244.2.3   k8s-node02   <none>           <none>

测试页面访问

curl 10.244.2.3
curl 10.244.2.3/hostname.html

删除这个 pod,会自动再启动一个,保持上边设置的 --replicas=1

kubectl delete pod nginx-deployment-796dd4654b-gjclq
# pod "nginx-deployment-796dd4654b-gjclq" deleted

kubectl get pod -o wide
# NAME                                READY   STATUS    RESTARTS   AGE   IP           NODE         NOMINATED NODE   READINESS GATES
# nginx-deployment-796dd4654b-75pwl   1/1     Running   0          34s   10.244.1.2   k8s-node01   <none>           <none>

扩容缩副本数量为 3个

kubectl scale --replicas=3 deployment/nginx-deployment
# deployment.extensions/nginx-deployment scaled

kubectl get pods -o wide
# NAME                                READY   STATUS    RESTARTS   AGE    IP           NODE         NOMINATED NODE   READINESS GATES
# nginx-deployment-796dd4654b-75pwl   1/1     Running   0          3m3s   10.244.1.2   k8s-node01   <none>           <none>
# nginx-deployment-796dd4654b-n65jx   1/1     Running   0          25s    10.244.1.3   k8s-node01   <none>           <none>
# nginx-deployment-796dd4654b-pq4jm   1/1     Running   0          25s    10.244.2.4   k8s-node02   <none>           <none>

暴露端口

kubectl expose --help
kubectl expose deployment nginx-deployment --port=30000 --target-port=80
# service/nginx-deployment exposed

kubectl get svc
# NAME               TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)     AGE
# kubernetes         ClusterIP   10.96.0.1      <none>        443/TCP     5d14h
# nginx-deployment   ClusterIP   10.97.93.121   <none>        30000/TCP   10s

查看 ipvs 负载均衡 ip

ipvsadm -Ln
# ...
# TCP  10.97.93.121:30000 rr
#   -> 10.244.1.2:80                Masq    1      0          2
#   -> 10.244.1.3:80                Masq    1      0          3
#   -> 10.244.2.4:80                Masq    1      0          3
# ...

kubectl get pod -o wide
# NAME                                READY   STATUS    RESTARTS   AGE    IP           NODE         NOMINATED NODE   READINESS GATES
# nginx-deployment-796dd4654b-75pwl   1/1     Running   0          11m    10.244.1.2   k8s-node01   <none>           <none>
# nginx-deployment-796dd4654b-n65jx   1/1     Running   0          9m1s   10.244.1.3   k8s-node01   <none>           <none>
# nginx-deployment-796dd4654b-pq4jm   1/1     Running   0          9m1s   10.244.2.4   k8s-node02   <none>           <none>

轮询机制访问pod,但内部地址不能被外部访问。

curl 10.97.93.121:30000/hostname.html

要在外部访问 ip, 修改 service 暴露类型 type: ClusterIP 改为 NodePort 以供外部访问。

kubectl get svc
# 修改 svc
kubectl edit svc nginx-deployment
# spec:
#   type: NodePort
# 会在所有节点暴露端口

kubectl get svc 
# NAME               TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)           AGE
# kubernetes         ClusterIP   10.96.0.1      <none>        443/TCP           5d15h
# nginx-deployment   NodePort    10.97.93.121   <none>        30000:32109/TCP   48m

查看端口

netstat -anpt | grep :32109
# tcp6       0      0 :::32109                :::*                    LISTEN      122747/kube-proxy

外部浏览器访问

http://192.168.66.10:32109/hostname.html
http://192.168.66.20:32109/hostname.html
http://192.168.66.21:32109/hostname.html