# 镜像查看:
docker images
# 删除已有镜像
docker rmi -f wangyanglinux/myapp:v1
docker rmi -f hub.hsl.com/library/myapp:v1
查看已存在 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