1、验证节点信息
1.1、查看控制平面组件的状态
- [root@linux-servertwo software]# kubectl get cs
- Warning: v1 ComponentStatus is deprecated in v1.19+
- NAME STATUS MESSAGE ERROR
- controller-manager Healthy ok
- scheduler Healthy ok
- etcd-0 Healthy {"health":"true"}
- #controller-manager: 控制器管理器,负责维护集群的状态,例如复制控制器、部署控制器等。
- #scheduler: 调度器,负责决定将哪个 Pod 安排到哪个节点。
- #etcd-0: 分布式键值存储,用于存储 Kubernetes 集群的所有数据。
复制代码 1.2、查看节点信息
1.2.1、查看节点信息
- #查看节点信息
- [root@linux-servertwo software]# kubectl get nodes
- NAME STATUS ROLES AGE VERSION
- linux-servertwo Ready control-plane,master,node 26h v1.20.9
复制代码 1.2.2、查看更加充分的节点信息
- #查看更加充分的节点信息
- [root@linux-servertwo software]# kubectl get nodes -o wide
- NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
- linux-servertwo Ready control-plane,master,node 27h v1.20.9 10.0.4.16 <none> CentOS Linux 7 (Core) 3.10.0-1160.108.1.el7.x86_64 docker://26.1.3
复制代码 1.2.3、查看节点详情
- #查看节点详情:
- [root@linux-servertwo software]# kubectl describe node linux-servertwo
- Name: linux-servertwo
- Roles: control-plane,master,node
- Labels: beta.kubernetes.io/arch=amd64
- beta.kubernetes.io/os=linux
- kubernetes.io/arch=amd64
- kubernetes.io/hostname=linux-servertwo
- kubernetes.io/os=linux
- node-role.kubernetes.io/control-plane=
- node-role.kubernetes.io/master=
- node-role.kubernetes.io/node=
- ......
复制代码 1.3、查看系统组件
- # 集群中的各个组件也都是以Pod方式运行的
- [root@linux-servertwo software]# kubectl get pods -n kube-system
- NAME READY STATUS RESTARTS AGE
- coredns-7f89b7bc75-2k74p 1/1 Running 0 27h
- coredns-7f89b7bc75-6xrvb 1/1 Running 0 27h
- etcd-linux-servertwo 1/1 Running 0 27h
- kube-apiserver-linux-servertwo 1/1 Running 0 27h
- kube-controller-manager-linux-servertwo 1/1 Running 0 25h
- kube-proxy-bmfzr 1/1 Running 0 27h
- kube-scheduler-linux-servertwo 1/1 Running 0 25h
复制代码 1.4、查看所有Pod
1.4.1、查看所有Pod信息
- [root@linux-servertwo software]# kubectl get pods --all-namespaces
- NAMESPACE NAME READY STATUS RESTARTS AGE
- kube-flannel kube-flannel-ds-lbmdr 1/1 Running 0 5d
- kube-system coredns-7f89b7bc75-47d56 1/1 Running 0 6d4h
- kube-system coredns-7f89b7bc75-h4c9b 1/1 Running 0 6d4h
- kube-system etcd-linux-servertwo 1/1 Running 0 6d4h
- kube-system kube-apiserver-linux-servertwo 1/1 Running 0 6d4h
- kube-system kube-controller-manager-linux-servertwo 1/1 Running 0 5d
- kube-system kube-proxy-j7d4v 1/1 Running 0 6d4h
- kube-system kube-scheduler-linux-servertwo 1/1 Running 0 5d
复制代码 1.4.2、查看更充分的所有pod信息
- # 查看更充分的所有pod详情信息
- [root@linux-servertwo software]# kubectl get pods --all-namespaces -o wide
- NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
- kube-flannel kube-flannel-ds-lbmdr 1/1 Running 0 5d 10.0.4.16 linux-servertwo <none> <none>
- kube-system coredns-7f89b7bc75-47d56 1/1 Running 0 6d4h 172.17.0.3 linux-servertwo <none> <none>
- kube-system coredns-7f89b7bc75-h4c9b 1/1 Running 0 6d4h 172.17.0.2 linux-servertwo <none> <none>
- kube-system etcd-linux-servertwo 1/1 Running 0 6d4h 10.0.4.16 linux-servertwo <none> <none>
- kube-system kube-apiserver-linux-servertwo 1/1 Running 0 6d4h 10.0.4.16 linux-servertwo <none> <none>
- kube-system kube-controller-manager-linux-servertwo 1/1 Running 0 5d 10.0.4.16 linux-servertwo <none> <none>
- kube-system kube-proxy-j7d4v 1/1 Running 0 6d4h 10.0.4.16 linux-servertwo <none> <none>
- kube-system kube-scheduler-linux-servertwo 1/1 Running 0 5d 10.0.4.16 linux-servertwo <none> <none>
复制代码 1.5、查看节点日志
- 使用 journalctl -u kubelet 命令查看日志信息
- # 动态查看 kubelet 日志的命令
- [root@linux-servertwo software]# journalctl -u kubelet -f
- Mar 19 15:53:58 linux-servertwo kubelet[25155]: I0319 15:53:58.023328 25155 reconciler.go:224] operationExecutor.VerifyControllerAttachedVolume started for volume "config-volume" (UniqueName: "kubernetes.io/configmap/9d6647d1-caeb-448a-9628-c5ac14821995-config-volume") pod "coredns-7f89b7bc75-47d56" (UID: "9d6647d1-caeb-448a-9628-c5ac14821995")
- Mar 19 15:53:58 linux-servertwo kubelet[25155]: map[string]interface {}{"cniVersion":"0.3.1", "hairpinMode":true, "ipMasq":false, "ipam":map[string]interface {}{"ranges":[][]map[string]interface {}{[]map[string]interface {}{map[string]interface {}{"subnet":"172.17.0.0/24"}}}, "routes":[]types.Route{types.Route{Dst:net.IPNet{IP:net.IP{0xac, 0x11, 0x0, 0x0}, Mask:net.IPMask{0xff, 0xff, 0x0, 0x0}}, GW:net.IP(nil)}}, "type":"host-local"}, "isDefaultGateway":true, "isGateway":true, "mtu":(*uint)(0xc00001c928), "name":"cbr0", "type":"bridge"}
- Mar 19 15:53:58 linux-servertwo kubelet[25155]: {"cniVersion":"0.3.1","hairpinMode":true,"ipMasq":false,"ipam":{"ranges":[[{"subnet":"172.17.0.0/24"}]],"routes":[{"dst":"172.17.0.0/16"}],"type":"host-local"},"isDefaultGateway":true,"isGateway":true,"mtu":1450,"name":"cbr0","type":"bridge"}
- Mar 19 15:53:58 linux-servertwo kubelet[25155]: map[string]interface {}{"cniVersion":"0.3.1", "hairpinMode":true, "ipMasq":false, "ipam":map[string]interface {}{"ranges":[][]map[string]interface {}{[]map[string]interface {}{map[string]interface {}{"subnet":"172.17.0.0/24"}}}, "routes":[]types.Route{types.Route{Dst:net.IPNet{IP:net.IP{0xac, 0x11, 0x0, 0x0}, Mask:net.IPMask{0xff, 0xff, 0x0, 0x0}}, GW:net.IP(nil)}}, "type":"host-local"}, "isDefaultGateway":true, "isGateway":true, "mtu":(*uint)(0xc0000a28e8), "name":"cbr0", "type":"bridge"}
复制代码 2、Namespaces
2.1、介绍
命名空间Namespaces主要作用是用来实现多套环境的资源隔离或者多租户的资源隔离。它能够将资源划分为不同的分组,帮助我们在一个集群中划分不同的项目、团队或者环境(如开发、测试和生产环境),从而提高资源的隔离性和管理效率。
2.2、查看创建的命名空间
- [root@linux-servertwo software]# kubectl get namespaces
- NAME STATUS AGE
- default Active 24h
- kube-flannel Active 19h
- kube-node-lease Active 24h
- kube-public Active 24h
- kube-system Active 24h
复制代码 2.3、创建命名空间
- [root@linux-servertwo software]# kubectl create namespace blog-dev
- namespace/blog-dev created
- # 再次查看-命名空间 blog-dev 创建成功
- [root@linux-servertwo software]# kubectl get namespaces
- NAME STATUS AGE
- blog-dev Active 17s
- default Active 24h
- kube-flannel Active 19h
- kube-node-lease Active 24h
- kube-public Active 24h
- kube-system Active 24h
复制代码 2.4、删除命名空间
- #删除
- [root@linux-servertwo software]# kubectl delete namespace blog-dev
- namespace "blog-dev" deleted
- #再次查看-发现已经删除
- [root@linux-servertwo software]# kubectl get namespaces
- NAME STATUS AGE
- default Active 24h
- kube-flannel Active 20h
- kube-node-lease Active 24h
- kube-public Active 24h
- kube-system Active 24h
复制代码 2.5、检索指定命名空间
- # 查看-检索指定命名空间
- [root@linux-servertwo software]# kubectl get namespaces blog-dev
- NAME STATUS AGE
- blog-dev Active 39s
- # 查看-指定命名空间详情
- [root@linux-servertwo software]# kubectl describe namespace blog-dev
- Name: blog-dev
- Labels: <none>
- Annotations: <none>
- Status: Active
- No resource quota.
- No LimitRange resource.
复制代码 2.6、查看命名空间中的资源
- [root@linux-servertwo software]# kubectl get pods -n blog-dev
- No resources found in blog-dev namespace.
- [root@linux-servertwo software]# kubectl get pod -n kube-system
- NAME READY STATUS RESTARTS AGE
- coredns-7f89b7bc75-47d56 1/1 Running 0 6d4h
- coredns-7f89b7bc75-h4c9b 1/1 Running 0 6d4h
- etcd-linux-servertwo 1/1 Running 0 6d4h
- kube-apiserver-linux-servertwo 1/1 Running 0 6d4h
- kube-controller-manager-linux-servertwo 1/1 Running 0 5d1h
- kube-proxy-j7d4v 1/1 Running 0 6d4h
- kube-scheduler-linux-servertwo 1/1 Running 0 5d1h
复制代码 2.7、输出yaml格式
- # 查看-输出yaml格式
- [root@linux-servertwo software]# kubectl get namespaces blog-dev -o yaml
- apiVersion: v1
- kind: Namespace
- metadata:
- creationTimestamp: "2024-12-10T03:58:55Z"
- managedFields:
- - apiVersion: v1
- fieldsType: FieldsV1
- fieldsV1:
- f:status:
- f:phase: {}
- manager: kubectl-create
- operation: Update
- time: "2024-12-10T03:58:55Z"
- name: blog-dev
- resourceVersion: "106051"
- uid: 406d2440-b725-409f-9a01-2bf8c606e5cf
- spec:
- finalizers:
- - kubernetes
- status:
- phase: Active
-
- # 输出一个yaml创建命名空间的格式,但不运行
- [root@linux-servertwo software]# kubectl create namespace blog-dev-1 --dry-run=client -o yaml
- apiVersion: v1
- kind: Namespace
- metadata:
- creationTimestamp: null
- name: blog-dev-1
- spec: {}
- status: {}
- # 输出一个yaml创建命名空间的格式,但不运行 ,输出到主机blog-dev-1.yaml文件中
- [root@linux-servertwo software]# kubectl create namespace blog-dev-1 --dry-run=client -o yaml > blog-dev-1.yaml
- #查看输出的文件信息
- [root@linux-servertwo software]# ls
- blog-dev-1.yaml
- [root@linux-servertwo software]# cat blog-dev-1.yaml
- apiVersion: v1
- kind: Namespace
- metadata:
- creationTimestamp: null
- name: blog-dev-1
- spec: {}
- status: {}
复制代码 2.8、YAML创建
- # 声明文件创建
- [root@linux-servertwo software]# kubectl apply -f blog-dev-1.yaml
- namespace/blog-dev-1 created
- [root@linux-servertwo software]# kubectl get namespaces
- NAME STATUS AGE
- blog-dev Active 3h11m
- blog-dev-1 Active 9s
- default Active 27h
- kube-flannel Active 23h
- kube-node-lease Active 27h
- kube-public Active 27h
- kube-system Active 27h
- nginx Active 37m
复制代码 2.9、YAML删除
- # 删除命名空间-以yml的形式
- [root@linux-servertwo software]# kubectl delete -f blog-dev-1.yaml
- namespace "blog-dev-1" deleted
- [root@linux-servertwo software]# kubectl get namespaces
- NAME STATUS AGE
- blog-dev Active 3h13m
- default Active 27h
- kube-flannel Active 23h
- kube-node-lease Active 27h
- kube-public Active 27h
- kube-system Active 27h
- nginx Active 38m
复制代码 2.10、切换命名空间
- # 通过设置默认命名空间,可以在运行其他命令时避免每次都加上 -n <namespace-name>
- [root@linux-servertwo software]# kubectl config set-context --current --namespace=kube-system
- Context "kubernetes-admin@kubernetes" modified.
- # 查看pod
- [root@linux-servertwo software]# kubectl get pods
- NAME READY STATUS RESTARTS AGE
- coredns-7f89b7bc75-47d56 1/1 Running 0 6d4h
- coredns-7f89b7bc75-h4c9b 1/1 Running 0 6d4h
- etcd-linux-servertwo 1/1 Running 0 6d4h
- kube-apiserver-linux-servertwo 1/1 Running 0 6d4h
- kube-controller-manager-linux-servertwo 1/1 Running 0 5d1h
- kube-proxy-j7d4v 1/1 Running 0 6d4h
- kube-scheduler-linux-servertwo 1/1 Running 0 5d1h
- # 查看当前使用的命名空间
- [root@linux-servertwo software]# kubectl config view --minify | grep namespace:
- namespace: kube-system
- # 设置为默认
- [root@linux-servertwo software]# kubectl config set-context --current --namespace=default
- Context "kubernetes-admin@kubernetes" modified.
- [root@linux-servertwo software]# kubectl config view --minify | grep namespace:
- namespace: default
-
- [root@linux-servertwo software]# kubectl get pods
- No resources found in default namespace.
复制代码 3、Pod命令使用
3.1、介绍
Pod是Kubernetes中可以创建和管理的最小部署单元,也是Kubernetes应用的基本运行单位,它封装了一个或多个容器和存储资源。Pod中的所有容器共享相同的网络命名空间、IP 地址、端口空间以及存储卷。通常情况下不直接管理 Pod,而是通过更高层次的抽象(如 Deployment、StatefulSet 等)来管理 Pod 的生命周期。下面就以安装nginx为例,单独介绍一下Pod的相关使用。
3.2、创建命名空间
首先创建好一个nginx的命名空间,做好数据隔离。- # 创建命名空间nginx
- [root@linux-servertwo software]# kubectl create namespace nginx
- namespace/nginx created
- # 列出所有Pod: kubectl get pods -n <namespace-name>
- [root@linux-servertwo software]# kubectl get pods -n nginx
- No resources found in nginx namespace.
复制代码 3.3、创建Pod
- # 创建Pod 通过Pod控制器创建Pod
- # 命令格式: kubectl run (pod控制器名称) [参数]
- # --image 指定Pod的镜像
- # --port 指定端口
- # --namespace 指定namespace
- [root@linux-servertwo nginx]# kubectl run nginx --image nginx:latest --port 80 --namespace nginx
- pod/nginx created
复制代码 3.4、查看Pod信息
- # 查看Pods信息
- [root@linux-servertwo nginx]# kubectl get pods -n nginx
- NAME READY STATUS RESTARTS AGE
- nginx 1/1 Running 0 9m6s
- # 更详细得查看pods信息
- [root@linux-servertwo nginx]# kubectl get pods -n nginx -o wide
- NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
- nginx 1/1 Running 0 15m 172.17.0.68 linux-servertwo <none> <none>
- # 查看详情Pod信息
- [root@linux-servertwo nginx]# kubectl describe pods nginx -n nginx
- Name: nginx
- Namespace: nginx
- Priority: 0
- Node: linux-servertwo/10.0.4.16
- Start Time: Wed, 11 Dec 2024 16:16:48 +0800
- Labels: run=nginx
- Annotations: <none>
- Status: Running
- IP: 172.17.0.68
- IPs:
- IP: 172.17.0.68
- ......
- Events:
- Type Reason Age From Message
- ---- ------ ---- ---- -------
- Normal Scheduled 9m29s default-scheduler Successfully assigned nginx/nginx to linux-servertwo
- Normal Pulling 9m28s kubelet Pulling image "nginx:latest"
- Normal Pulled 8m36s kubelet Successfully pulled image "nginx:latest" in 52.683702042s
- Normal Created 8m35s kubelet Created container nginx
- Normal Started 8m35s kubelet Started container nginx
复制代码 3.5、验证创建成功
- # 根据IP访问nginx,发现nginx启动成功
- [root@linux-servertwo nginx]# curl 172.17.0.68:80
- <!DOCTYPE html>
- <html>
- <head>
- <title>Welcome to nginx!</title>
- </head>
- <body>
- <h1>Welcome to nginx!</h1>
- <p>If you see this page, the nginx web server is successfully installed and
- working. Further configuration is required.</p>
- <p>For online documentation and support please refer to
- nginx.org.<br/>
- Commercial support is available at
- nginx.com.</p>
- <p><em>Thank you for using nginx.</em></p>
- </body>
- </html>
复制代码 3.6、删除Pod
- # 删除Pod
- [root@linux-servertwo nginx]# kubectl delete pods -n nginx nginx
- pod "nginx" deleted
- # 再次查看,发现已经删除
- [root@linux-servertwo nginx]# kubectl get pod -n nginx
- No resources found in nginx namespace.
- # 上面只删除Pod,创建的命名空间还在
- [root@linux-servertwo nginx]# kubectl get namespaces
- NAME STATUS AGE
- blog-dev Active 28h
- default Active 2d4h
- kube-flannel Active 2d
- kube-node-lease Active 2d4h
- kube-public Active 2d4h
- kube-system Active 2d4h
- kubernetes-dashboard Active 155m
- nginx Active 26h
复制代码 3.7、YAML创建Pod
接下来使用yaml格式文件创建nginx- # 输出一个 nginx 的 yaml 格式 pod 到 nginx-pod.yaml 文件
- [root@linux-servertwo nginx]# kubectl run nginx --image nginx:latest --port 80 --namespace nginx --dry-run=client -o yaml > nginx-pod.yaml
- # 查看 nginx-pod.yaml 文件
- [root@linux-servertwo nginx]# cat nginx-pod.yaml
- apiVersion: v1
- kind: Pod
- metadata:
- creationTimestamp: null
- labels:
- run: nginx
- name: nginx
- namespace: nginx
- spec:
- containers:
- - image: nginx:latest
- name: nginx
- ports:
- - containerPort: 80
- resources: {}
- dnsPolicy: ClusterFirst
- restartPolicy: Always
- status: {}
- # pod 声明
- [root@linux-servertwo nginx]# kubectl apply -f nginx-pod.yaml
- pod/nginx created
- # 查看-发现创建成功
- [root@linux-servertwo nginx]# kubectl get pod nginx -n nginx
- NAME READY STATUS RESTARTS AGE
- nginx 1/1 Running 0 20s
- # 查看详情
- [root@linux-servertwo nginx]# kubectl describe pod nginx -n nginx
- Name: nginx
- Namespace: nginx
- Priority: 0
- Node: linux-servertwo/10.0.4.16
- Start Time: Wed, 11 Dec 2024 16:42:53 +0800
- Labels: run=nginx
- Annotations: <none>
- Status: Running
- IP: 172.17.0.69
- IPs:
- IP: 172.17.0.69
- ......
- Events:
- Type Reason Age From Message
- ---- ------ ---- ---- -------
- Normal Scheduled 93s default-scheduler Successfully assigned nginx/nginx to linux-servertwo
- Normal Pulling 93s kubelet Pulling image "nginx:latest"
- Normal Pulled 91s kubelet Successfully pulled image "nginx:latest" in 2.213103384s
- Normal Created 91s kubelet Created container nginx
- Normal Started 91s kubelet Started container nginx
复制代码 3.8、验证是否成功
- # 访问
- [root@linux-servertwo nginx]# curl 172.17.0.69:80
- <!DOCTYPE html>
- <html>
- <head>
- <title>Welcome to nginx!</title>
- </head>
- <body>
- <h1>Welcome to nginx!</h1>
- <p>If you see this page, the nginx web server is successfully installed and
- working. Further configuration is required.</p>
- <p>For online documentation and support please refer to
- nginx.org.<br/>
- Commercial support is available at
- nginx.com.</p>
- <p><em>Thank you for using nginx.</em></p>
- </body>
- </html>
复制代码 3.9、YAML删除Pod
- #删除-通过yaml方式
- [root@linux-servertwo nginx]# kubectl delete -f nginx-pod.yaml
- pod "nginx" deleted
- #再次查看,发现和使用命令删除Pod一样,只删除Pod不删除namespaces
- [root@linux-servertwo nginx]# kubectl get pod -n nginx
- No resources found in nginx namespace.
- [root@linux-servertwo nginx]# kubectl get namespaces
- NAME STATUS AGE
- blog-dev Active 28h
- default Active 2d5h
- kube-flannel Active 2d
- kube-node-lease Active 2d5h
- kube-public Active 2d5h
- kube-system Active 2d5h
- kubernetes-dashboard Active 168m
- nginx Active 26h
复制代码 3.10、查看Pod日志
- # 通过 kubectl logs <pod-name> -n <namespace-name> 进行查看特定命名空间中 Pod 的日志
- [root@linux-servertwo software]# kubectl logs nginx -n nginx
- /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
- /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
- /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
- 10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
- 10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
- /docker-entrypoint.sh: Sourcing /docker-entrypoint.d/15-local-resolvers.envsh
- /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
- /docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
- /docker-entrypoint.sh: Configuration complete; ready for start up
- 2025/03/24 09:32:43 [notice] 1#1: using the "epoll" event method
- 2025/03/24 09:32:43 [notice] 1#1: nginx/1.27.4
- 2025/03/24 09:32:43 [notice] 1#1: built by gcc 12.2.0 (Debian 12.2.0-14)
- 2025/03/24 09:32:43 [notice] 1#1: OS: Linux 3.10.0-1160.108.1.el7.x86_64
- 2025/03/24 09:32:43 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 65536:65536
- 2025/03/24 09:32:43 [notice] 1#1: start worker processes
- 2025/03/24 09:32:43 [notice] 1#1: start worker process 29
- 2025/03/24 09:32:43 [notice] 1#1: start worker process 30
- 172.17.0.1 - - [24/Mar/2025:09:33:19 +0000] "GET / HTTP/1.1" 200 615 "-" "curl/7.29.0" "-"
- 172.17.0.1 - - [24/Mar/2025:09:34:24 +0000] "GET / HTTP/1.1" 200 615 "-" "curl/7.29.0" "-"
- 172.17.0.1 - - [24/Mar/2025:09:34:26 +0000] "GET / HTTP/1.1" 200 615 "-" "curl/7.29.0" "-"
- # 如果 Pod 包含多个容器,可以指定容器名称
- # kubectl logs <pod-name> -c <container-name>
- [root@linux-servertwo software]# kubectl logs nginx -n nginx -c nginx -f
- /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
- /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
- /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
- 10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
- 10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
- /docker-entrypoint.sh: Sourcing /docker-entrypoint.d/15-local-resolvers.envsh
- /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
- /docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
- /docker-entrypoint.sh: Configuration complete; ready for start up
- 2025/03/24 13:01:13 [notice] 1#1: using the "epoll" event method
- 2025/03/24 13:01:13 [notice] 1#1: nginx/1.27.4
- 2025/03/24 13:01:13 [notice] 1#1: built by gcc 12.2.0 (Debian 12.2.0-14)
- 2025/03/24 13:01:13 [notice] 1#1: OS: Linux 3.10.0-1160.108.1.el7.x86_64
- 2025/03/24 13:01:13 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 65536:65536
- 2025/03/24 13:01:13 [notice] 1#1: start worker processes
- 2025/03/24 13:01:13 [notice] 1#1: start worker process 29
- 2025/03/24 13:01:13 [notice] 1#1: start worker process 30
- 172.17.0.1 - - [24/Mar/2025:13:01:40 +0000] "GET / HTTP/1.1" 200 615 "-" "curl/7.29.0" "-"
- 172.17.0.1 - - [24/Mar/2025:13:03:47 +0000] "GET / HTTP/1.1" 200 615 "-" "curl/7.29.0" "-"
- 172.17.0.1 - - [25/Mar/2025:02:24:58 +0000] "GET / HTTP/1.1" 200 615 "-" "curl/7.29.0" "-"
复制代码 3.11、进入容器
- # 进入Pod容器:kubectl exec -it <pod-name> -- /bin/bash
- [root@linux-servertwo software]# kubectl exec -it nginx -n nginx -- /bin/bash
- root@nginx:/# ls
- bin boot dev docker-entrypoint.d docker-entrypoint.sh etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
- root@nginx:/# nginx -V
- nginx version: nginx/1.27.4
- built by gcc 12.2.0 (Debian 12.2.0-14)
- built with OpenSSL 3.0.11 19 Sep 2023 (running with OpenSSL 3.0.15 3 Sep 2024)
- TLS SNI support enabled
- configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-http_v3_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-g -O2 -ffile-prefix-map=/data/builder/debuild/nginx-1.27.4/debian/debuild-base/nginx-1.27.4=. -fstack-protector-strong -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -Wl,--as-needed -pie'
- root@nginx:/#
- # 如果 Pod 中有多个容器,可以通过 -c 参数指定容器:kubectl exec -it <pod-name> -c <container-name> -- /bin/bash
- [root@linux-servertwo software]# kubectl exec -it nginx -c nginx -n nginx -- /bin/bash
- root@nginx:/# ls
- bin boot dev docker-entrypoint.d docker-entrypoint.sh etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
- root@nginx:/#
复制代码 3.12、查看 Pod 关联的事件
- # 查看与 Pod 相关的事件,了解 Pod 的运行状态以及错误信息:
- [root@linux-servertwo software]# kubectl get events --field-selector involvedObject.name=nginx -n nginx
- LAST SEEN TYPE REASON OBJECT MESSAGE
- 5m42s Normal Scheduled pod/nginx Successfully assigned nginx/nginx to linux-servertwo
- 5m42s Normal Pulling pod/nginx Pulling image "nginx:latest"
- 5m32s Normal Pulled pod/nginx Successfully pulled image "nginx:latest" in 9.177513284s
- 5m32s Normal Created pod/nginx Created container nginx
- 5m32s Normal Started pod/nginx Started container nginx
复制代码 3.13、Pod 的扩展和缩容
直接修改 Pod 数量需要使用副本集(ReplicaSet)或部署(Deployment)来管理。例如,使用以下命令扩展或缩容 Pod 副本数:- # kubectl scale --replicas=<num> deployment/<deployment-name>
- kubectl scale --replicas=3 deployment/my-app-nginx
复制代码 在 Kubernetes 中,Pod 的扩展和缩容通常是通过它们的资源来管理的。Deployment 允许定义多个副本(Pod 实例),并可以根据需要进行扩展和缩容。Deployment 会自动管理 Pod 的生命周期和状态,包括在需要时扩展和缩容 Pod 数量。下面就来介绍Deployment 的相关使用命令。
4、Deployment命令使用
4.1、介绍
在 Kubernetes中,Pod 是最小的调度和管理单元,但Kubernetes很少直接操作单个 Pod。通常,Kubernetes是通过 Pod 控制器 来间接管理 Pod,实现对 Pod 的控制与维护,确保 Pod 的状态始终符合预期。这些控制器负责自动化创建、调度、更新和扩展 Pod,并确保其高可用性和健康。当 Pod 发生故障或失效时,控制器会自动执行恢复操作,如重启或重新创建 Pod,以确保应用的连续性和稳定性。Kubernetes中常见的 Pod控制器 包括 Deployment、ReplicaSet、StatefulSet、DaemonSet、Job 和 CronJob,它们各自负责不同的用例和场景,提供了灵活的管理方式,满足不同的需求场景。通过这些控制器,Kubernetes实现了强大的自愈能力、扩展性和灵活性,使得容器化应用的管理更加高效、可靠。下面介绍其中一个 Pod控制器 :Deployment
4.2、创建 Deployment
可以通过 kubectl create 或 kubectl apply 命令来创建 Deployment- # 创建deployment控制器
- # 命令格式:
- # kubectl create deployment 名称 [参数]
- # 参数:
- # -n/--namespace 指定创建的所属命名空间
- # --image 指定pod的镜像
- # --port 指定端口
- # --replicas 指定创建pod数量 --replicas=3:指定该 Deployment 创建的 Pod 副本数量为 3,
- # 该命令表示 Kubernetes 将确保始终有 3 个运行中的 nginx Pod 实例来提供服务,实现高可用性和负载均衡
- [root@linux-servertwo software]# kubectl create deployment nginx -n nginx --image nginx:latest --port 80 --replicas=3
- deployment.apps/nginx created
- # 查看命名空间下面的Pod
- [root@linux-servertwo nginx]# kubectl get pods -n nginx
- NAME READY STATUS RESTARTS AGE
- nginx-585449566-6788b 1/1 Running 0 39s
- nginx-585449566-bhbtp 1/1 Running 0 39s
- nginx-585449566-gk2kl 1/1 Running 0 39s
复制代码 4.3、查看 Deployment
- # 查看deployment状态
- [root@linux-servertwo nginx]# kubectl get deployment -n nginx
- NAME READY UP-TO-DATE AVAILABLE AGE
- nginx 3/3 3 3 88s
- # 查看某一个 Deployment 信息 kubectl get deployment <deployment-name> <namespaces>
- [root@linux-servertwo software]# kubectl get deployment nginx -n nginx
- NAME READY UP-TO-DATE AVAILABLE AGE
- nginx 3/3 3 3 25m
- # 查看 Deployment 的 YAML 配置
- [root@linux-servertwo software]# kubectl get deployment nginx -n nginx -o yaml
- apiVersion: apps/v1
- kind: Deployment
- metadata:
- annotations:
- deployment.kubernetes.io/revision: "1"
- generation: 1
- labels:
- app: nginx
- ......
- status:
- availableReplicas: 3
- conditions:
- - lastTransitionTime: "2025-03-25T07:38:18Z"
- lastUpdateTime: "2025-03-25T07:38:18Z"
- message: Deployment has minimum availability.
- reason: MinimumReplicasAvailable
- status: "True"
- type: Available
- - lastTransitionTime: "2025-03-25T07:38:14Z"
- lastUpdateTime: "2025-03-25T07:38:18Z"
- message: ReplicaSet "nginx-585449566" has successfully progressed.
- reason: NewReplicaSetAvailable
- status: "True"
- type: Progressing
- observedGeneration: 1
- readyReplicas: 3
- replicas: 3
- updatedReplicas: 3
- # 更详细得查看deployment信息 UP-TO-DATE:成功升级的副本数量, AVAILABLE:可用副本的数量
- [root@linux-servertwo nginx]# kubectl get deployment -n nginx -o wide
- NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
- nginx 3/3 3 3 4m56s nginx nginx:latest app=nginx
- # 查看deployment详情
- [root@linux-servertwo nginx]# kubectl describe deployment -n nginx
- Name: nginx
- Namespace: nginx
- CreationTimestamp: Fri, 13 Dec 2024 10:26:15 +0800
- Labels: app=nginx
- Annotations: deployment.kubernetes.io/revision: 1
- Selector: app=nginx
- Replicas: 3 desired | 3 updated | 3 total | 3 available | 0 unavailable
- StrategyType: RollingUpdate
- MinReadySeconds: 0
- RollingUpdateStrategy: 25% max unavailable, 25% max surge
- Pod Template:
- Labels: app=nginx
- Containers:
- nginx:
- Image: nginx:latest
- Port: 80/TCP
- Host Port: 0/TCP
- Environment: <none>
- Mounts: <none>
- Volumes: <none>
- Conditions:
- Type Status Reason
- ---- ------ ------
- Available True MinimumReplicasAvailable
- Progressing True NewReplicaSetAvailable
- OldReplicaSets: <none>
- NewReplicaSet: nginx-585449566 (3/3 replicas created)
- Events:
- Type Reason Age From Message
- ---- ------ ---- ---- -------
- Normal ScalingReplicaSet 3m9s deployment-controller Scaled up replica set nginx-585449566 to 3
复制代码 4.4、验证访问
- # 查看每一个nginx启动的容器IP
- [root@linux-servertwo nginx]# kubectl get pod -n nginx -o wide
- NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
- nginx-585449566-6788b 1/1 Running 0 9m33s 172.17.0.71 linux-servertwo <none> <none>
- nginx-585449566-bhbtp 1/1 Running 0 9m33s 172.17.0.72 linux-servertwo <none> <none>
- nginx-585449566-gk2kl 1/1 Running 0 9m33s 172.17.0.73 linux-servertwo <none> <none>
- # 通过IP尝试访问 172.17.0.71
- [root@linux-servertwo nginx]# curl 172.17.0.71
- <!DOCTYPE html>
- <html>
- <head>
- <title>Welcome to nginx!</title>
- </head>
- <body>
- <h1>Welcome to nginx!</h1>
- <p>If you see this page, the nginx web server is successfully installed and
- working. Further configuration is required.</p>
- <p>For online documentation and support please refer to
- nginx.org.<br/>
- Commercial support is available at
- nginx.com.</p>
- <p><em>Thank you for using nginx.</em></p>
- </body>
- </html>
- # 通过IP尝试访问 172.17.0.72
- [root@linux-servertwo nginx]# curl 172.17.0.72
- <!DOCTYPE html>
- <html>
- <head>
- <title>Welcome to nginx!</title>
- </head>
- <body>
- <h1>Welcome to nginx!</h1>
- <p>If you see this page, the nginx web server is successfully installed and
- working. Further configuration is required.</p>
- <p>For online documentation and support please refer to
- nginx.org.<br/>
- Commercial support is available at
- nginx.com.</p>
- <p><em>Thank you for using nginx.</em></p>
- </body>
- </html>
- # 通过IP尝试访问 172.17.0.73
- [root@linux-servertwo nginx]# curl 172.17.0.73
- <!DOCTYPE html>
- <html>
- <head>
- <title>Welcome to nginx!</title>
- </head>
- <body>
- <h1>Welcome to nginx!</h1>
- <p>If you see this page, the nginx web server is successfully installed and
- working. Further configuration is required.</p>
- <p>For online documentation and support please refer to
- nginx.org.<br/>
- Commercial support is available at
- nginx.com.</p>
- <p><em>Thank you for using nginx.</em></p>
- </body>
- </html>
复制代码 4.5、进入容器
- # 进入其中一个POD的容器内部
- [root@linux-servertwo nginx]# kubectl exec -it -n nginx nginx-585449566-6788b /bin/bash
- kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
- root@nginx-585449566-6788b:/#
- # 上面命令提示已经准备弃用,使用新命令进入 需要加 --
- [root@linux-servertwo nginx]# kubectl exec -it -n nginx nginx-585449566-6788b -- /bin/bash
- root@nginx-585449566-6788b:/# nginx -v
- nginx version: nginx/1.27.3
复制代码 4.6、更新 Deployment
更新 Deployment 可以通过 kubectl set 或 kubectl apply 实现- # 将上面部署的 nginx 的 deployment 的容器镜像更新为 nginx:1.19.0
- # kubectl set image deployment/<deployment-name> <container-name>=<new-image>
- [root@linux-servertwo software]# kubectl set image deployment/nginx nginx=nginx:1.19 -n nginx
- deployment.apps/nginx image updated
- # 查看是否更新-查看信息发现更新成功
- [root@linux-servertwo software]# kubectl get deployment -n nginx -o wide
- NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
- nginx 3/3 3 3 40m nginx nginx:1.19 app=nginx
- # 进入其中一个POD的容器内部 查看nginx版本
- [root@linux-servertwo software]# kubectl exec -it -n nginx nginx-5479877cb4-2lpwv -- /bin/bash
- root@nginx-5479877cb4-2lpwv:/# nginx -v
- nginx version: nginx/1.19.10
复制代码 4.7、查看和管理 Deployment 版本
- # 查看 Deployment 的历史版本
- [root@linux-servertwo software]# kubectl rollout history deployment/nginx -n nginx
- deployment.apps/nginx
- REVISION CHANGE-CAUSE
- 1 <none>
- 2 <none>
- # 变更记录,REVISION 1: 初始部署的版本,REVISION 2: 更新后的版本,CHANGE-CAUSE: 每个修订版本的变更原因或描述。当前两个版本的 CHANGE-CAUSE 都为空。
- # 这可以通过在 kubectl set image 命令中添加 --record 参数来实现,每次更新时提供 CHANGE-CAUSE 信息
- # --record 参数会将命令记录到 Deployment 的变更历史中,方便后续查看和回滚。
- # 如以上更新命令加上参数 kubectl set image deployment/nginx nginx=nginx:1.19 -n nginx --record
- # 查看 Deployment 的滚动更新状态
- [root@linux-servertwo software]# kubectl rollout status deployment/nginx -n nginx
- deployment "nginx" successfully rolled out
- # 输出以上信息,表示 nginx Deployment 的滚动更新已经成功完成
复制代码 4.8、回滚 Deployment 版本
如果更新后的应用出现问题,可以通过回滚命令恢复到先前的版本。- # 回滚到上一个版本:kubectl rollout undo deployment/<deployment-name>
- [root@linux-servertwo software]# kubectl rollout undo deployment/nginx -n nginx
- deployment.apps/nginx rolled back
- # 查看是否回滚成功
- [root@linux-servertwo software]# kubectl get deployment -n nginx -o wide
- NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
- nginx 3/3 3 3 68m nginx nginx:latest app=nginx
- # 可以发现nginx版本已经变为部署时候的最新版本。
- # 回滚到某个特定版本:kubectl rollout undo deployment/<deployment-name> --to-revision=<revision-number>
- [root@linux-servertwo software]# kubectl rollout undo deployment/nginx -n nginx --to-revision=2
- deployment.apps/nginx rolled back
- # 查看是否回滚成功
- [root@linux-servertwo software]# kubectl get deployment -n nginx -o wide
- NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
- nginx 3/3 3 3 75m nginx nginx:1.19 app=nginx
- # 发现又回到了更新之后的版本。
复制代码 4.9、暂停和恢复 Deployment
- # 暂停正在进行的更新操作:kubectl rollout pause deployment/<deployment-name>
- [root@linux-servertwo software]# kubectl rollout pause deployment/nginx -n nginx
- deployment.apps/nginx paused
- # 恢复暂停的更新操作:kubectl rollout resume deployment/<deployment-name>
- [root@linux-servertwo software]# kubectl rollout resume deployment/nginx -n nginx
- deployment.apps/nginx resumed
复制代码 4.10、删除 Deployment
- # 删除某个 Deployment:kubectl delete deployment <deployment-name>
- [root@linux-servertwo software]# kubectl delete deployment nginx -n nginx
- deployment.apps "nginx" deleted
- # 再次查看deployment发现已经删除
- [root@linux-servertwo software]# kubectl get deployment -n nginx
- No resources found in nginx namespace.
- # 删除 deployment后,Pod也自动删除了
- [root@linux-servertwo software]# kubectl get pod -n nginx
- No resources found in nginx namespace.
复制代码 4.11、YAML创建
- # 输出一个yaml创建nginx的Deployment格式文件,但不运行 ,输出到主机nginx-deployment.yml文件中
- [root@linux-servertwo software]# kubectl create deployment nginx -n nginx --image nginx:latest --port 80 --replicas=3 --dry-run=client -o yaml > nginx-deployment.yml
- # 输出成功后,查看输出的yml文件
- [root@linux-servertwo software]# cat nginx-deployment.yml
- apiVersion: apps/v1
- kind: Deployment
- metadata:
- creationTimestamp: null
- labels:
- app: nginx
- name: nginx
- namespace: nginx
- spec:
- replicas: 3
- selector:
- matchLabels:
- app: nginx
- strategy: {}
- template:
- metadata:
- creationTimestamp: null
- labels:
- app: nginx
- spec:
- containers:
- - image: nginx:latest
- name: nginx
- ports:
- - containerPort: 80
- resources: {}
- status: {}
- # 运行nginx的YML文件
- [root@linux-servertwo software]# kubectl apply -f nginx-deployment.yml
- deployment.apps/nginx created
- # 查看是否创建成功
- [root@linux-servertwo software]# kubectl get deployment -n nginx -o wide
- NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
- nginx 3/3 3 3 2m29s nginx nginx:latest app=nginx
- # 查看运行的Pod
- [root@linux-servertwo software]# kubectl get pod -n nginx -o wide
- NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
- nginx-585449566-46b9w 1/1 Running 0 5m31s 172.17.0.21 linux-servertwo <none> <none>
- nginx-585449566-lcmlp 1/1 Running 0 5m31s 172.17.0.22 linux-servertwo <none> <none>
- nginx-585449566-x6rcl 1/1 Running 0 5m31s 172.17.0.20 linux-servertwo <none> <none>
复制代码 4.12、YAML删除
- # 通过 kubectl delete 命令进行删除,删除 Deployment 会自动删除与之关联的所有 Pod。
- [root@linux-servertwo software]# kubectl delete -f nginx-deployment.yml
- deployment.apps "nginx" deleted
- # 查看Deployment
- [root@linux-servertwo software]# kubectl get deployment -n nginx
- No resources found in nginx namespace.
- # 查看Pod
- [root@linux-servertwo software]# kubectl get pod -n nginx
- No resources found in nginx namespace.
复制代码 4.13、删除指定Pod
- # 如果只需要删除其中一个Pod,而不删除Deployment,执行删除Pod的命令即可
- [root@linux-servertwo nginx]# kubectl delete pods -n nginx nginx-585449566-lcmlp
- pod "nginx-585449566-lcmlp" deleted
- # 删除其中一个后,Deployment 会根据其配置,在自动创建一个新的 Pod 来保持所需的副本数量
- # 再次查看运行的Pod,发现还是保持3个副本数量,但是Ip地址已经更新了。
- [root@linux-servertwo software]# kubectl get pod -n nginx -o wide
- NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
- nginx-585449566-46b9w 1/1 Running 0 5m31s 172.17.0.21 linux-servertwo <none> <none>
- nginx-585449566-krqsh 1/1 Running 0 14s 172.17.0.26 linux-servertwo <none> <none>
- nginx-585449566-x6rcl 1/1 Running 0 5m31s 172.17.0.20 linux-servertwo <none> <none>
复制代码 5、Service命令使用
5.1、介绍
Service 是 Kubernetes一种资源类型,它主要定义了一组Pod的访问策略,并为这些Pod提供一个稳定的固定网络地址,而无需了解这些Pod的具体 IP 地址。Service 主要用于将一组 Pod 暴露给集群内的其他服务或外部用户,使其可以通过网络与其他应用程序之间提供一个更加可靠和灵活的通信。
5.2、创建 Service
首先执行nginx-deployment.yml 文件创建一个Deployment的nginx服务,- # 创建 Deployment nginx
- [root@linux-servertwo software]# kubectl apply -f nginx-deployment.yml
- deployment.apps/nginx created
- # 查看是否启动成功
- [root@linux-servertwo software]# kubectl get deployment -n nginx -o wide
- NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
- nginx 3/3 3 3 33s nginx nginx:latest app=nginx
- [root@linux-servertwo software]# kubectl get pod -n nginx -o wide
- NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
- nginx-585449566-5lxwx 1/1 Running 0 40s 172.17.0.29 linux-servertwo <none> <none>
- nginx-585449566-l9wvw 1/1 Running 0 40s 172.17.0.28 linux-servertwo <none> <none>
- nginx-585449566-lfjgc 1/1 Running 0 40s 172.17.0.27 linux-servertwo <none> <none>
复制代码 然后在进入每一个Pod的Nginx容器内部,配置一下html页面信息,方便后面查看- # 进入 nginx-585449566-5lxwx 容器内部
- [root@linux-servertwo nginx]# kubectl exec -it -n nginx nginx-585449566-5lxwx -- bash
- root@nginx-585449566-6788b:/# echo this is 172.17.0.29 nginx > /usr/share/nginx/html/index.html
- root@nginx-585449566-6788b:/# cat /usr/share/nginx/html/index.html
- this is 172.17.0.29 nginx
- # 进入 nginx-585449566-l9wvw 容器内部
- [root@linux-servertwo nginx]# kubectl exec -it -n nginx nginx-585449566-l9wvw -- bash
- root@nginx-585449566-bhbtp:/# echo this is 172.17.0.28 nginx > /usr/share/nginx/html/index.html
- root@nginx-585449566-bhbtp:/# cat /usr/share/nginx/html/index.html
- this is 172.17.0.28 nginx
- # 进入 nginx-585449566-lfjgc 容器内部
- [root@linux-servertwo nginx]# kubectl exec -it -n nginx nginx-585449566-lfjgc -- bash
- root@nginx-585449566-gk2kl:/# echo this is 172.17.0.27 nginx > /usr/share/nginx/html/index.html
- root@nginx-585449566-gk2kl:/# cat /usr/share/nginx/html/index.html
- this is 172.17.0.27 nginx
- # 验证访问
- [root@linux-servertwo software]# curl 172.17.0.29
- this is 172.17.0.29 nginx
- [root@linux-servertwo software]# curl 172.17.0.28
- this is 172.17.0.28 nginx
- [root@linux-servertwo software]# curl 172.17.0.27
- this is 172.17.0.27 nginx
复制代码 接下来就可以创建一个集群内部可访问的Service了- # 通过以下命令创建一个内部的Service服务访问Pods
- # kubectl expose pod <pod-name> --name=<service-name> --port=<port> --target-port=<target-port> --type=<service-type>
- [root@linux-servertwo nginx]# kubectl expose deployment -n nginx nginx --name=svc-nginx --type=ClusterIP --port=80 --target-port=80
- service/svc-nginx exposed
- # type 类型:
- # ClusterIP:默认类型,服务只在集群内部可访问。
- # NodePort:在每个 Node 上打开一个端口,并通过该端口暴露服务。
- # LoadBalancer:使用云服务提供商的负载均衡器来暴露服务,通常适用于云环境。
- # ExternalName:通过 DNS 名称将外部服务映射到 Kubernetes 集群中的服务,适用于需要访问集群外部服务的情况。
复制代码 5.3、查看 Service
- # 查看创建的Service
- [root@linux-servertwo software]# kubectl get service -n nginx
- NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
- svc-nginx ClusterIP 172.16.251.156 <none> 80/TCP 19s
- # 查看更充分的Service
- [root@linux-servertwo software]# kubectl get service -n nginx -o wide
- NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
- svc-nginx ClusterIP 172.16.251.156 <none> 80/TCP 56s app=nginx
- # ClusterIP 此类型只允许集群内访问,这里生成了一个CLUSTER-IP的IP,这就是service的IP。在Service的生命周期中,这个地址是不会变动的,可以通过这个IP访问当前service对应的Pod
- # 详情查看 kubectl describe service <service-name>
- [root@linux-servertwo software]# kubectl describe service svc-nginx -n nginx
- Name: svc-nginx
- Namespace: nginx
- Labels: app=nginx
- Annotations: <none>
- Selector: app=nginx
- Type: ClusterIP
- IP Families: <none>
- IP: 172.16.251.156
- IPs: 172.16.251.156
- Port: <unset> 80/TCP
- TargetPort: 80/TCP
- Endpoints: 172.17.0.27:80,172.17.0.28:80,172.17.0.29:80
- Session Affinity: None
- Events: <none>
- # 查看 Endpoint 信息-存储了Service对应的Pod的实际IP地址和端口信息
- [root@linux-servertwo software]# kubectl get endpoints -n nginx svc-nginx
- NAME ENDPOINTS AGE
- svc-nginx 172.17.0.27:80,172.17.0.28:80,172.17.0.29:80 42m
复制代码 5.4、验证访问
通过访问CLUSTER-IP对应的IP 进行测试- [root@linux-servertwo software]# curl 172.16.251.156
- this is 172.17.0.29 nginx
- [root@linux-servertwo software]# curl 172.16.251.156
- this is 172.17.0.28 nginx
- [root@linux-servertwo software]# curl 172.16.251.156
- this is 172.17.0.27 nginx
- [root@linux-servertwo software]# curl 172.16.251.156
- this is 172.17.0.28 nginx
- [root@linux-servertwo software]# curl 172.16.251.156
- this is 172.17.0.29 nginx
- [root@linux-servertwo software]# curl 172.16.251.156
- this is 172.17.0.29 nginx
- [root@linux-servertwo software]# curl 172.16.251.156
- this is 172.17.0.27 nginx
- [root@linux-servertwo software]# curl 172.16.251.156
- this is 172.17.0.27 nginx
- [root@linux-servertwo software]# curl 172.16.251.156
- this is 172.17.0.29 nginx
复制代码 通过以上的多次访问,可以看到 Service IP 会随机将请求转发到其中一个 Pod 上的 Nginx 中,这表明内部实现了负载均衡。这个负载均衡通过 kube-proxy 在第四层(传输层)完成的,适用于 TCP 和 UDP 流量。无论是 ClusterIP 还是 NodePort 类型的 Service,kube-proxy 都会在集群内部创建路由规则,将请求转发到后端的 Pod。当客户端请求发送到 Service 的 Cluster IP 地址时,kube-proxy 会把请求转发到一个或多个 Pod。由于这种负载均衡是在第四层(传输层)进行的, 因此不需要理解更高层次的应用协议。
5.5、kube-proxy 实现负载均衡介绍
在 Kubernetes 中,kube-proxy 使用 iptables 规则来实现 Service 的负载均衡。通过查看 iptables 规则,可以了解访问 Service 的 Cluster IP 地址时的具体链路规则。以下是具体步骤和示例:- # 查看 iptables 规则
- # iptables-save | grep KUBE 或者 iptables -L -t nat | grep KUBE
- [root@linux-servertwo software]# iptables -L -t nat | grep KUBE
- # 只截取部署nginx的重要部分进行说明
- # 通过注释可以查看 /* nginx/svc-nginx */ 表明这是与 nginx/svc-nginx 服务相关的流量
- Chain KUBE-SEP-MEC45OHITDUK5UCI (1 references)
- KUBE-MARK-MASQ all -- 172.17.0.27 anywhere /* nginx/svc-nginx */
- Chain KUBE-SEP-OVGUVNLN5SZ5SJPC (1 references)
- KUBE-MARK-MASQ all -- 172.17.0.28 anywhere /* nginx/svc-nginx */
- Chain KUBE-SEP-Q7FC6ND2772R7A3Y (1 references)
- KUBE-MARK-MASQ all -- 172.17.0.29 anywhere /* nginx/svc-nginx */
- # KUBE-SERVICES 链是 Kubernetes 服务暴露的入口。它是 Kubernetes 网络代理(kube-proxy)实现负载均衡的地方,可以看到IP:172.16.251.156 就是创建的nginx service的IP
- Chain KUBE-SERVICES (2 references)
- KUBE-MARK-MASQ tcp -- !linux-servertwo/16 172.16.251.156 /* nginx/svc-nginx cluster IP */ tcp dpt:http
- KUBE-SVC-XDC2TBTFGP42ST2T tcp -- anywhere 172.16.251.156 /* nginx/svc-nginx cluster IP */ tcp dpt:http
- # 通过下面可以看出,使用了 加权随机负载均衡
- KUBE-SEP-MEC45OHITDUK5UCI all -- anywhere anywhere /* nginx/svc-nginx */ statistic mode random probability 0.33333333349
- KUBE-SEP-OVGUVNLN5SZ5SJPC all -- anywhere anywhere /* nginx/svc-nginx */ statistic mode random probability 0.50000000000
- KUBE-SEP-Q7FC6ND2772R7A3Y all -- anywhere anywhere /* nginx/svc-nginx */
- # statistic mode random 是一种概率机制,表示 Kubernetes 根据给定的概率将流量随机地发送到指定的 Pod。这里的概率是:
- # 33% 的流量会被转发到 MEC45OHITDUK5UCI 这个 Pod。
- # 50% 的流量会被转发到 OVGUVNLN5SZ5SJPC 这个 Pod。
- # 剩余的流量会被转发到 Q7FC6ND2772R7A3Y 这个 Pod。
- # 结合这些规则,Kubernetes 通过随机概率来实现加权负载均衡,确保流量按照一定的比例(33%、50%)分发到不同的后端 Pod。这样的方式可以根据服务负载或者其他策略调整流量分配比例。
复制代码 5.6、创建外部可访问的Service
想要创建集群外部也可访问的Service ,只需要在创建 service 指定--type= 的类型为 NodePord 类型 即可。- # 查看 Service
- [root@linux-servertwo software]# kubectl get service -n nginx -o wide
- NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
- svc-nginx ClusterIP 172.16.251.156 <none> 80/TCP 169m app=nginx
- # 删除原先的 ClusterIP 类型的服务
- [root@linux-servertwo software]# kubectl delete service -n nginx svc-nginx
- service "svc-nginx" deleted
- # 再次查看,发现已经删除
- [root@linux-servertwo software]# kubectl get service -n nginx
- No resources found in nginx namespace.
- # 创建NodePord类型的服务
- [root@linux-servertwo software]# kubectl expose deployment -n nginx nginx --name=svc-nginx --type=NodePort --port=80 --target-port=80
- service/svc-nginx exposed
- # 查看是否创建成功
- [root@linux-servertwo software]# kubectl get service -n nginx
- NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
- svc-nginx NodePort 172.16.237.241 <none> 80:31918/TCP 17s
- # 通过以上输出可以发现PORT(S) 属性80端口映射到31918端口了, 然后就可以通过访问31918端口在外部访问 nginx 了,访问主机IP+指定端口号31918就可以访问的随机一个 Pod 的 Nginx。使用宿主机访问31918端口:
- [root@linux-servertwo software]# curl localhost:31918
- this is 172.17.0.29 nginx
- [root@linux-servertwo software]# curl localhost:31918
- this is 172.17.0.28 nginx
- [root@linux-servertwo software]# curl localhost:31918
- this is 172.17.0.29 nginx
- [root@linux-servertwo software]# curl localhost:31918
- this is 172.17.0.27 nginx
- # 所以,如果是集群内部访问,可以通过 172.16.237.241:80 访问 svc-nginx。如果是集群外部访问,使用节点的 IP 地址和端口 31918 访问 svc-nginx
复制代码 5.7、删除 Service
- # 通过 kubectl delete service <service-name> 进行删除
- [root@linux-servertwo software]# kubectl delete service -n nginx svc-nginx
- service "svc-nginx" deleted
- # 再次查看发现已经删除
- [root@linux-servertwo software]# kubectl get service -n nginx
- No resources found in nginx namespace.
复制代码 5.8、YAML创建
- # 输出一个 yaml 创建 nginx 的 Service 格式文件但不运行,输出到主机nginx-service.yml文件中
- [root@linux-servertwo software]# kubectl expose deployment -n nginx nginx --name=svc-nginx --type=NodePort --port=80 --target-port=80 --dry-run=client -o yaml > nginx-service.yml
- # 输出成功后,查看输出的yml文件
- [root@linux-servertwo software]# cat nginx-service.yml
- apiVersion: v1
- kind: Service
- metadata:
- creationTimestamp: null
- labels:
- app: nginx
- name: svc-nginx
- spec:
- ports:
- - port: 80
- protocol: TCP
- targetPort: 80
- selector:
- app: nginx
- type: NodePort
- status:
- loadBalancer: {}
- # 在使用kubectl expose命令生成Service的YAML文件时,生成的YAML文件默认不会包含命名空间信息,需要手动在生成的YAML文件中添加命名空间。
- # 编辑 nginx-service.yml 文件,添加需要创建的命名空间后,再次查看
- [root@linux-servertwo software]# cat nginx-service.yml
- apiVersion: v1
- kind: Service
- metadata:
- creationTimestamp: null
- labels:
- app: nginx
- name: svc-nginx
- namespace: nginx # 添加命名空间信息
- spec:
- ports:
- - port: 80
- protocol: TCP
- targetPort: 80
- selector:
- app: nginx
- type: NodePort
- status:
- loadBalancer: {}
-
- # 运行nginx的YML文件
- [root@linux-servertwo software]# kubectl apply -f nginx-service.yml
- service/svc-nginx created
- # 查看是否创建成功
- [root@linux-servertwo software]# kubectl get service -n nginx
- NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
- svc-nginx NodePort 172.16.87.14 <none> 80:30501/TCP 17s
- # 验证访问
- # 访问内部IP+端口
- [root@linux-servertwo software]# curl 172.16.87.14
- this is 172.17.0.28 nginx
- [root@linux-servertwo software]# curl 172.16.87.14
- this is 172.17.0.29 nginx
- [root@linux-servertwo software]# curl 172.16.87.14
- this is 172.17.0.28 nginx
- # 访问主机节点IP+端口
- [root@linux-servertwo software]# curl localhost:30501
- this is 172.17.0.27 nginx
- [root@linux-servertwo software]# curl localhost:30501
- this is 172.17.0.28 nginx
复制代码 5.9、YAML删除
- # 删除
- [root@linux-servertwo software]# kubectl delete -f nginx-service.yml
- service "svc-nginx" deleted
- # 再次查看
- [root@linux-servertwo software]# kubectl get service -n nginx
- No resources found in nginx namespace.
复制代码 6、ipvs配置
kube-proxy 支持多种模式来实现这种负载均衡,包括:
iptables 模式:这是默认的模式,kube-proxy 使用 iptables 规则来实现 Service 到 Pod 的负载均衡。
ipvs 模式:从Kubernetes 1.8开始支持,使用 IPVS(IP Virtual Server)代替iptables来实现负载均衡,IPVS 通常被认为比iptables更高效,尤其是在高并发场景下。- # 查看所有 iptables规则
- iptables -t nat -nL | iptables -L -v -n
- # k8s开启ipvs,首先查看,发现没有该命令
- [root@linux-servertwo software]# ipvsadm -ln
- -bash: ipvsadm: command not found
- # 安装 ipvsadm 工具
- yum install ipvsadm -y
- # 再次执行
- [root@linux-servertwo software]# ipvsadm -ln
- IP Virtual Server version 1.2.1 (size=4096)
- Prot LocalAddress:Port Scheduler Flags
- -> RemoteAddress:Port Forward Weight ActiveConn InActConn
-
- # 查看加载内核模快是否加载ipvs
- [root@linux-servertwo software]# lsmod | grep ip_vs
- ip_vs_sh 12688 0
- ip_vs_wrr 12697 0
- ip_vs_rr 12600 0
- ip_vs 145458 6 ip_vs_rr,ip_vs_sh,ip_vs_wrr
- nf_conntrack 143411 7 ip_vs,nf_nat,nf_nat_ipv4,xt_conntrack,nf_nat_masquerade_ipv4,nf_conntrack_netlink,nf_conntrack_ipv4
- libcrc32c 12644 3 ip_vs,nf_nat,nf_conntrack
- # 由于kube-proxy默认是通过iptables来进行转发的,需要将iptables转换为ipvs(提高性能)
- [root@linux-servertwo software]# kubectl edit -n kube-system configmaps kube-proxy
- # 默认为空,加上 ipvs 修改成功后保存
- mode: "" -> mode: "ipvs"
- # 查看系统运行的Pod
- [root@linux-servertwo software]# kubectl get pod -n kube-system
- NAME READY STATUS RESTARTS AGE
- coredns-7f89b7bc75-47d56 1/1 Running 0 8d
- coredns-7f89b7bc75-h4c9b 1/1 Running 0 8d
- etcd-linux-servertwo 1/1 Running 0 8d
- kube-apiserver-linux-servertwo 1/1 Running 0 8d
- kube-controller-manager-linux-servertwo 1/1 Running 0 7d
- kube-proxy-j7d4v 1/1 Running 0 8d
- kube-scheduler-linux-servertwo 1/1 Running 0 7d
- # 删除包含 kube-proxy的Pod
- [root@linux-servertwo software]# kubectl delete pod -n kube-system kube-proxy-j7d4v
- pod "kube-proxy-j7d4v" deleted
- # 删除成功后,再次查看,发现会重新创建一个新的 kube-proxy 的pod
- [root@linux-servertwo software]# kubectl get pod -n kube-system
- NAME READY STATUS RESTARTS AGE
- coredns-7f89b7bc75-47d56 1/1 Running 0 8d
- coredns-7f89b7bc75-h4c9b 1/1 Running 0 8d
- etcd-linux-servertwo 1/1 Running 0 8d
- kube-apiserver-linux-servertwo 1/1 Running 0 8d
- kube-controller-manager-linux-servertwo 1/1 Running 0 7d
- kube-proxy-wbst6 1/1 Running 0 16s
- kube-scheduler-linux-servertwo 1/1 Running 0 7d
- #重新查看-列出所有
- [root@linux-servertwo nginx]# ipvsadm -ln
- # 条件筛选
- [root@linux-servertwo software]# ipvsadm -ln | grep -A 3 "127.0.0.1:30501"
- TCP 127.0.0.1:30501 rr
- -> 172.17.0.27:80 Masq 1 0 0
- -> 172.17.0.28:80 Masq 1 0 0
- -> 172.17.0.29:80 Masq 1 0 0
- # 输出以上信息,说明使用ipvs负载均衡成功
复制代码 7、实践-部署nginx
7.1、描述
通过以上的命令介绍,已经会使用K8s部署一个简单的应用了,接下来就来通过使用Deployment+NodePort的模式 安装部署一个高可用的Nginx服务。
7.2、创建YML
创建一个 ingress-nginx.yml 文件,配置Nginx的部署信息- # 1、创建 Namespace
- apiVersion: v1
- kind: Namespace
- metadata:
- creationTimestamp: null
- name: nginx-proxy
- spec: {}
- status: {}
- ---
- # 2、创建 Deployment
- apiVersion: apps/v1
- kind: Deployment
- metadata:
- creationTimestamp: null
- labels:
- app: nginx-proxy
- name: nginx-proxy
- namespace: nginx-proxy
- spec:
- replicas: 3
- selector:
- matchLabels:
- app: nginx-proxy
- strategy: {}
- template:
- metadata:
- creationTimestamp: null
- labels:
- app: nginx-proxy
- spec:
- #hostNetwork: true 使用宿主机的网络接口
- nodeSelector:
- beta.kubernetes.io/os: linux
- priorityClassName: system-node-critical
- containers:
- - image: nginx:1.23.1
- name: nginx
- imagePullPolicy: IfNotPresent
- ports:
- - containerPort: 80
- resources:
- limits:
- cpu: 300m
- memory: 512M
- requests:
- cpu: 25m
- memory: 32M
- volumeMounts:
- - name: conf
- mountPath: /etc/nginx/nginx.conf
- readOnly: true
- volumes:
- - name: conf
- hostPath:
- path: /opt/software/k8s-deployment/nginx/conf/nginx.conf
- status: {}
- ---
- # 3、创建 Service
- apiVersion: v1
- kind: Service
- metadata:
- creationTimestamp: null
- labels:
- app: nginx-proxy
- name: svc-nginx
- namespace: nginx-proxy
- spec:
- ports:
- - port: 80
- protocol: TCP
- targetPort: 80
- nodePort: 31001
- selector:
- app: nginx-proxy
- type: NodePort
- status:
- loadBalancer: {}
复制代码 参数配置说明:
分隔符- --- 分隔符是 Kubernetes YAML 文件中的标准语法,用于区分同一文件中的多个资源定义,使得一个文件可以包含多个资源对象。Deployment、Service 和 Namespace 是三个不同的 Kubernetes 资源定义,因此需要使用 --- 进行分隔。通过将多个资源定义写在一个 YAML 文件中,并用 --- 分隔,kubectl apply 可以一次性创建或更新多个资源,而不需要分别写多个文件或执行多次命令。
复制代码 Namespace 配置说明:- # kind:Namespace 表示yaml文件创建的是命名空间
- # metadata 表示命名空间的元信息
- # metadata.name 是命名空间的名称 取值nginx
- # metadata.labels 是命名空间的标签 name=nginx
复制代码 Deployment 配置说明- hostNetwork: true # 使用宿主机的网络接口
- priorityClassName: system-node-critical # 用来设置Pod优先级,确保其在集群中具有较高的优先权。
- # 关于 priorityClassName 优先级说明
- # Kubernetes 默认提供了以下几种优先级类:
- # system-node-critical:关键节点服务,优先级最高。 主要作用:Pod 会在资源紧张时优先保留,不会被驱逐,确保它们在节点上保持运行。
- # system-cluster-critical:集群级别的关键服务,优先级最高。确保关键组件(如控制平面组件)能够在资源不足的情况下继续运行,如 kube-apiserver、 kube-controller-manager、kube-scheduler 等
- # default:普通的默认优先级类。它的优先级低于 system-node-critical 和 system-cluster-critical
- # 可以根据需要自定义优先级类。
- beta.kubernetes.io/os: linux # 确保Pod只会在具有该标签的节点上运行,避免调度到不符合条件的节点上
复制代码 Service 配置说明- # 创建 NodePort Service 时,可以指定范围为30000-32767的端口
复制代码 7.3、启动YML
- # 通过 kubectl apply -f 创建
- [root@linux-servertwo nginx]# kubectl apply -f ingress-nginx.yml
- namespace/nginx-proxy created
- deployment.apps/nginx-proxy created
- service/svc-nginx created
复制代码 7.4、查看
- # 查看命名空间
- [root@linux-servertwo nginx]# kubectl get namespace nginx-proxy
- NAME STATUS AGE
- nginx-proxy Active 4m7s
- # 查看资源
- [root@linux-servertwo nginx]# kubectl get deploy,svc,pod -n nginx-proxy
- NAME READY UP-TO-DATE AVAILABLE AGE
- deployment.apps/nginx-proxy 3/3 3 3 4m20s
- NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
- service/svc-nginx NodePort 172.16.44.247 <none> 80:31001/TCP 4m20s
- NAME READY STATUS RESTARTS AGE
- pod/nginx-proxy-6966ffc86c-289vk 1/1 Running 0 4m20s
- pod/nginx-proxy-6966ffc86c-f47vl 1/1 Running 0 4m20s
- pod/nginx-proxy-6966ffc86c-hqjvp 1/1 Running 0 4m20s
复制代码 7.5、验证是否成功
- # 查看资源详情显示IP地址
- [root@linux-servertwo nginx]# kubectl get deploy,svc,pod -n nginx-proxy -o wide
- NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
- deployment.apps/nginx-proxy 3/3 3 3 4m39s nginx nginx:1.23.1 app=nginx-proxy
- NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
- service/svc-nginx NodePort 172.16.44.247 <none> 80:31001/TCP 4m39s app=nginx-proxy
- NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
- pod/nginx-proxy-6966ffc86c-289vk 1/1 Running 0 4m39s 172.17.0.58 linux-servertwo <none> <none>
- pod/nginx-proxy-6966ffc86c-f47vl 1/1 Running 0 4m39s 172.17.0.59 linux-servertwo <none> <none>
- pod/nginx-proxy-6966ffc86c-hqjvp 1/1 Running 0 4m39s 172.17.0.57 linux-servertwo <none> <none>
- # 查看ipvs链路规则
- [root@linux-servertwo nginx]# ipvsadm -ln | grep -A 3 "127.0.0.1:31001"
- TCP 127.0.0.1:31001 rr
- -> 172.17.0.57:80 Masq 1 0 0
- -> 172.17.0.58:80 Masq 1 0 0
- -> 172.17.0.59:80 Masq 1 0 0
-
- # 验证负载均衡-首先进入容器内部配置html页面
- [root@linux-servertwo nginx]# kubectl exec -it -n nginx-proxy nginx-proxy-6966ffc86c-289vk -- bash
- root@nginx-proxy-6966ffc86c-289vk:/# echo this is 172.17.0.58 nginx > /usr/share/nginx/html/index.html
- root@nginx-proxy-6966ffc86c-289vk:/# cat /usr/share/nginx/html/index.html
- this is 172.17.0.58 nginx
- # 进入容器 172.17.0.59
- [root@linux-servertwo nginx]# kubectl exec -it -n nginx-proxy nginx-proxy-6966ffc86c-f47vl -- bash
- root@nginx-proxy-6966ffc86c-f47vl:/# echo this is 172.17.0.59 nginx > /usr/share/nginx/html/index.html
- root@nginx-proxy-6966ffc86c-f47vl:/# cat /usr/share/nginx/html/index.html
- this is 172.17.0.59 nginx
- # 进入容器 172.17.0.57
- [root@linux-servertwo nginx]# kubectl exec -it -n nginx-proxy nginx-proxy-6966ffc86c-hqjvp -- bash
- root@nginx-proxy-6966ffc86c-hqjvp:/# echo this is 172.17.0.57 nginx > /usr/share/nginx/html/index.html
- root@nginx-proxy-6966ffc86c-hqjvp:/# cat /usr/share/nginx/html/index.html
- this is 172.17.0.57 nginx
- # 访问服务service
- root@nginx-proxy-6966ffc86c-hqjvp:/# curl 172.16.44.247
- this is 172.17.0.59 nginx
- root@nginx-proxy-6966ffc86c-hqjvp:/# curl 172.16.44.247
- this is 172.17.0.58 nginx
- root@nginx-proxy-6966ffc86c-hqjvp:/# curl 172.16.44.247
- this is 172.17.0.57 nginx
- root@nginx-proxy-6966ffc86c-hqjvp:/# curl 172.16.44.247
- this is 172.17.0.59 nginx
复制代码 7.6、删除YML
- # 删除 ingress-nginx.yml
- [root@linux-servertwo nginx]# kubectl delete -f ingress-nginx.yml
- namespace "nginx-proxy" deleted
- deployment.apps "nginx-proxy" deleted
- service "svc-nginx" deleted
- # 再次查看 namespace
- [root@linux-servertwo nginx]# kubectl get namespace nginx-proxy
- Error from server (NotFound): namespaces "nginx-proxy" not found
- # 查看资源
- [root@linux-servertwo nginx]# kubectl get deploy,svc,pod -n nginx-proxy -o wide
- No resources found in nginx-proxy namespace.
复制代码 来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |