82、k8s的service-NodePort端口开放和生命周期

news2024/9/20 18:50:07

0、单节点服务,以及k8s命令

[root@master01 ~]# kubectl create deployment nginx1 --image=nginx:1.22 --replicas=3

[root@master01 ~]# kubectl create deployment nginx1 --image=nginx:1.22    ##创建资源
deployment.apps/nginx1 created

[root@master01 opt]# kubectl delete deployments nginx1     ##删除资源
deployment.apps "nginx1" deleted


[root@master01 ~]# kubectl get pod  ##拉取镜像
[root@master01 ~]# kubectl describe pod nginx1-654cb56c4-rlldr   ##查看镜像拉取具体情况
[root@master01 opt]# kubectl delete pod nginx1-654cb56c4-rlldr      ##删除容器
pod "nginx2-65747db8cd-zfsdt" deleted


[root@master01 ~]# kubectl get pod -o wide  ##查看pod容器的ip地址可以看到
[root@master01 ~]# kubectl create deployment test1 --image=nginx:1.18 --replicas=3 ##拉取三个镜像副本


##删除pod
[root@master01 docker]# kubectl delete pod nginx1-654cb56c4-rlldr
pod "nginx1-654cb56c4-rlldr" deleted
[root@master01 docker]# kubectl delete pod nginx2-65747db8cd-ws5r6 
pod "nginx2-65747db8cd-ws5r6" deleted
[root@master01 docker]# kubectl delete pod test1-866b78d79f-qffhg
pod "test1-866b78d79f-qffhg" deleted
[root@master01 docker]# kubectl delete pod test4-6b57d78d9-82nsh
pod "test4-6b57d78d9-82nsh" deleted

##重新拉取
[root@master01 docker]# kubectl get pod
NAME                      READY   STATUS    RESTARTS   AGE
nginx1-654cb56c4-7nfqr    1/1     Running   0          48s
nginx2-65747db8cd-zfsdt   1/1     Running   0          33s
test1-866b78d79f-lq57j    1/1     Running   0          19s
test4-6b57d78d9-k8j76     1/1     Running   0          4s


##查看容器的ip地址
[root@master01 docker]# kubectl get pod -o wide
NAME                      READY   STATUS    RESTARTS   AGE     IP            NODE     NOMINATED NODE   READINESS GATES
nginx1-654cb56c4-7nfqr    1/1     Running   0          5m26s   10.244.1.5    node01   <none>           <none>
nginx2-65747db8cd-zfsdt   1/1     Running   0          5m11s   10.244.2.10   node02   <none>           <none>
test1-866b78d79f-lq57j    1/1     Running   0          4m57s   10.244.2.11   node02   <none>           <none>
test4-6b57d78d9-k8j76     1/1     Running   0          4m42s   10.244.1.6    node01   <none>           <none>


##查看路由网关
[root@master01 docker]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.168.2   0.0.0.0         UG    100    0        0 ens33
10.244.0.0      0.0.0.0         255.255.255.0   U     0      0        0 cni0
10.244.1.0      10.244.1.0      255.255.255.0   UG    0      0        0 flannel.1
10.244.2.0      10.244.2.0      255.255.255.0   UG    0      0        0 flannel.1
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0
192.168.168.0   0.0.0.0         255.255.255.0   U     100    0        0 ens33

##测试
[root@master01 docker]# curl 10.244.1.5
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>

##查看资源对象
[root@master01 docker]# kubectl get deployments.apps 
NAME     READY   UP-TO-DATE   AVAILABLE   AGE
nginx1   1/1     1            1           139m
nginx2   1/1     1            1           133m
test1    1/1     1            1           129m
test4    1/1     1            1           114m


##service的30000端口与容器的80端口做映射
[root@master01 docker]# kubectl expose deployment nginx1 --port=30000 --target-port=80
service/nginx1 exposed

##查看service
[root@master01 docker]# kubectl get svc
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)     AGE
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP     34h
nginx1       ClusterIP   10.96.163.136   <none>        30000/TCP   71s

##修改
[root@master01 docker]# kubectl edit svc nginx1 
     28   type: NodePort

##与宿主机的端口做映射
[root@master01 docker]# kubectl get svc
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)           AGE
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP           34h
nginx1       NodePort    10.96.163.136   <none>        30000:32357/TCP   4m42s

##测试外部访问宿主机,通过映射到容器内
[root@master01 docker]# curl 192.168.168.81:32357
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>

[root@master01 docker]# kubectl exec -it nginx1-654cb56c4-7nfqr bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@nginx1-654cb56c4-7nfqr:/# cd /usr/share/nginx/html
root@nginx1-654cb56c4-7nfqr:/usr/share/nginx/html# ls
50x.html  index.html
root@nginx1-654cb56c4-7nfqr:/usr/share/nginx/html# echo 123 > index.html 
[root@master01 docker]# curl 192.168.168.81:32357
123


1、k8s部署nginx实现负载均衡

[root@master01 ~]# kubectl create deployment nginx1 --image=nginx:1.22 --replicas=3
[root@master01 opt]# kubectl get pod
[root@master01 opt]# kubectl describe pod nginx1-654cb56c4-dtj7v 
[root@master01 opt]# kubectl get pod -o wide
[root@master01 opt]# route -n
[root@master01 opt]# curl 10.244.2.14
[root@master01 opt]# kubectl get deployments.apps 
NAME     READY   UP-TO-DATE   AVAILABLE   AGE
nginx1   3/3     3            3           4m16s

##service的30000端口与容器的80端口做映射
[root@master01 docker]# kubectl expose deployment nginx1 --port=30000 --target-port=80
service/nginx1 exposed

##查看service
[root@master01 docker]# kubectl get svc
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)     AGE
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP     34h
nginx1       ClusterIP   10.96.163.136   <none>        30000/TCP   71s

##修改
[root@master01 docker]# kubectl edit svc nginx1 
     28   type: NodePort

##与宿主机的端口做映射
[root@master01 docker]# kubectl get svc
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)           AGE
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP           34h
nginx1       NodePort    10.96.163.136   <none>        30000:32357/TCP   4m42s

##测试外部访问宿主机,通过映射到容器内
[root@master01 docker]# curl 192.168.168.81:32357
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>

[root@master01 opt]# kubectl get pod
NAME                     READY   STATUS    RESTARTS   AGE
nginx1-654cb56c4-dtj7v   1/1     Running   0          9m35s
nginx1-654cb56c4-r5q8r   1/1     Running   0          9m35s
nginx1-654cb56c4-swhz5   1/1     Running   0          9m35s


[root@master01 opt]# kubectl exec -it nginx1-654cb56c4-dtj7v bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@nginx1-654cb56c4-dtj7v:/# cd /usr/share/nginx/html
root@nginx1-654cb56c4-dtj7v:/usr/share/nginx/html# 
root@nginx1-654cb56c4-dtj7v:/usr/share/nginx/html# ls
50x.html  index.html
root@nginx1-654cb56c4-dtj7v:/usr/share/nginx/html# echo 123 > index.html 
root@nginx1-654cb56c4-dtj7v:/usr/share/nginx/html# exit
exit

[root@master01 docker]# curl 192.168.168.81:32357
123


[root@master01 opt]# kubectl exec -it nginx1-654cb56c4-r5q8r bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@nginx1-654cb56c4-r5q8r:/# cd /usr/share/nginx/html/
root@nginx1-654cb56c4-r5q8r:/usr/share/nginx/html# echo 456 > index.html 
root@nginx1-654cb56c4-r5q8r:/usr/share/nginx/html# exit
exit

[root@master01 opt]# kubectl exec -it nginx1-654cb56c4-swhz5 bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@nginx1-654cb56c4-swhz5:/# echo 789 > /usr/share/nginx/html/index.html 
root@nginx1-654cb56c4-swhz5:/# exit 
exit


[root@master01 opt]# curl 192.168.168.81:32357
456
[root@master01 opt]# curl 192.168.168.81:32357
789
[root@master01 opt]# curl 192.168.168.81:32357
123
[root@master01 opt]# curl 192.168.168.81:32357
456
[root@master01 opt]# curl 192.168.168.81:32357
789
[root@master01 opt]# curl 192.168.168.81:32357
123

一、kubectl

kubectl陈述式资源管理方式(命令行)管理(增删改查)

创建资源对象:pod 控制器 service 声明式( yaml文件写的)

#陈述式命令的开头 kubectl 命令行工具

1.1、kubectl 命令

1、查看集群的版本
[root@master01 ~]# kubectl version
2、查看集群资源对象的版本和他的简写
[root@master01 ~]# kubectl api-resources 

在这里插入图片描述

3、查看集群的信息
[root@master01 ~]# kubectl cluster-info 

在这里插入图片描述

4、查看集群的日志
[root@master01 ~]# tail -f /var/log/messages
[root@master01 ~]# journalctl -u kubelet -f
5、查看集群组件的健康状态
[root@master01 ~]# kubectl get cs
6、查看节点的状态
[root@master01 ~]# kubectl get node
7、查询默认命名空间里面的当前运行的pod default
[root@master01 ~]# kubectl get pod

name:pod的名称
ready:1/1 正常状态
status:running 运行 表名pod属于正常状态
restart:表示pod的重启次数。自愈状态,pod非正常状态下,会自动重启,状态正常后不会再进行重启。
age:当前pod的运行时间。
8、查看命名空间kube-system的pod
[root@master01 ~]# kubectl get pod -n kube-system 
9、创建、删除命名空间
[root@master01 ~]# kubectl create namespace xy102
namespace/xy102 created
[root@master01 ~]# kubectl delete ns xy102
namespace "xy102" deleted
10、查看当前命名空间的所有资源
[root@master01 ~]# kubectl get all

在这里插入图片描述

11、查看pod的详细信息,pod被部署在哪个节点上。
[root@master01 ~]# kubectl get pod -o wide

在这里插入图片描述

1.2、deployment部署方式:

  • 资源对象的部署的方式叫做deployment

  • 无状态部署方式,pod的名称是随机生成的。

  • 创建时可以指定副本数(pod)

  • 滚动更新,先更新一个,更新好了之后再更新余下的pod

  • 自我修复,默认的策略就是重启容器,删除pod相当于重启pod。

  • 支持回滚,如果更新有问题,可以恢复到上一个版本

  • pod的扩容和缩容(手动)

在这里插入图片描述

1、在xy102命名空间里面创建资源镜像
##创建命名空间
[root@master01 ~]# kubectl create namespace xy102

##在xy102命名空间里面创建资源镜像
[root@master01 ~]# kubectl create deployment nginx1 --image=nginx:1.22 --replicas=3 -n xy102
deployment.apps/nginx1 created

##拉取镜像
[root@master01 ~]# kubectl get pod -n xy102  
NAME                     READY   STATUS    RESTARTS   AGE
nginx1-654cb56c4-kh46c   1/1     Running   0          27s
nginx1-654cb56c4-kw6d5   1/1     Running   0          27s
nginx1-654cb56c4-xcksm   1/1     Running   0          27s
2、此处delete不再是删除,而是重启

在这里插入图片描述

[root@master01 ~]# kubectl get pod -n xy102 
NAME                     READY   STATUS    RESTARTS   AGE
nginx1-654cb56c4-kh46c   1/1     Running   0          27s
nginx1-654cb56c4-kw6d5   1/1     Running   0          27s
nginx1-654cb56c4-xcksm   1/1     Running   0          27s
[root@master01 ~]# kubectl delete pod nginx1-654cb56c4-kh46c -n xy102  ##删除pod-nginx1-654cb56c4-kh46c
pod "nginx1-654cb56c4-kh46c" deleted
[root@master01 ~]# kubectl get pod -n xy102  ##相当于重启pod
NAME                     READY   STATUS    RESTARTS   AGE
nginx1-654cb56c4-7plg2   1/1     Running   0          10s
nginx1-654cb56c4-kw6d5   1/1     Running   0          5m38s
nginx1-654cb56c4-xcksm   1/1     Running   0          5m38s


##集群控制器(资源对象)deployment创建的pod,delete pod相当于重启pod,不能删除pod。
3、跳过资源对象直接创建pod–nginx2
[root@master01 ~]# kubectl delete pod nginx1-654cb56c4-kh46c -n xy102  ##删除
pod "nginx1-654cb56c4-kh46c" deleted
[root@master01 ~]# kubectl get pod -n xy102 ##重启
NAME                     READY   STATUS    RESTARTS   AGE
nginx1-654cb56c4-7plg2   1/1     Running   0          10s
nginx1-654cb56c4-kw6d5   1/1     Running   0          5m38s
nginx1-654cb56c4-xcksm   1/1     Running   0          5m38s

##无资源对象直接创建pod--nginx2
[root@master01 ~]# kubectl run nginx2 --image=nginx:1.22 -n xy102   
pod/nginx2 created
[root@master01 ~]# kubectl get pod -n xy102 
NAME                     READY   STATUS    RESTARTS   AGE
nginx1-654cb56c4-7plg2   1/1     Running   0          4m48s
nginx1-654cb56c4-kw6d5   1/1     Running   0          10m
nginx1-654cb56c4-xcksm   1/1     Running   0          10m
nginx2                   1/1     Running   0          11s
4、没用资源对象创建nignx2,删除pod就直接删除
[root@master01 ~]# kubectl delete pod nginx2 -n xy102 
pod "nginx2" deleted
[root@master01 ~]# kubectl get pod -n xy102 
NAME                     READY   STATUS    RESTARTS   AGE
nginx1-654cb56c4-7plg2   1/1     Running   0          6m25s
nginx1-654cb56c4-kw6d5   1/1     Running   0          11m
nginx1-654cb56c4-xcksm   1/1     Running   0          11m
5、查看pod的详细信息
[root@master01 ~]# kubectl describe pod -n xy102 nginx1-654cb56c4-7plg2 
[root@master01 ~]# kubectl run nginx2 --image=nginx:1.22 -n xy102
pod/nginx2 created
[root@master01 ~]# kubectl describe pod -n xy102 nginx2
6、查看详情
[root@master01 ~]# kubectl describe deployments.apps -n xy102 nginx1
7、查看日志
[root@master01 ~]# kubectl logs nginx1-654cb56c4-7plg2 -n xy102
[root@master01 ~]# kubectl logs -f nginx1-654cb56c4-7plg2 -n xy102  ##动态查看

8、进入自定义命名空间的容器
[root@master01 ~]# kubectl exec -it nginx1-654cb56c4-7plg2 bash
##没加自定义命名空间,进入不了容器
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
Error from server (NotFound): pods "nginx1-654cb56c4-7plg2" not found
-------------------以上纯属看错误--------------------
[root@master01 ~]# kubectl exec -it -n xy102 nginx1-654cb56c4-7plg2 bash  ##自定义命令空间,需要添加命令空间,进入pod的容器
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@nginx1-654cb56c4-7plg2:/# 
9、pod的数量扩容或者缩容
[root@master01 ~]# kubectl get pod -n xy102
NAME                     READY   STATUS    RESTARTS   AGE
nginx1-654cb56c4-7plg2   1/1     Running   0          34m
nginx1-654cb56c4-kw6d5   1/1     Running   0          40m
nginx1-654cb56c4-xcksm   1/1     Running   0          40m
nginx2                   1/1     Running   0          24m
[root@master01 ~]# kubectl get pod -n xy102 -o wide

[root@node02 ~]# docker ps | grep nginx
10、容器副本缩容------命令行
[root@master01 ~]# kubectl scale deployment nginx1 -n xy102 --replicas=1
11、容器副本扩容------命令行
[root@master01 ~]# kubectl scale deployment nginx1 -n xy102 --replicas=3
12、容器副本缩容-------修改文件
[root@master01 ~]# kubectl edit deployment nginx1 -n xy102 

  replicas: 1


deployment.apps/nginx1 edited
[root@master01 ~]# kubectl get pod -n xy102 -o wide
NAME                     READY   STATUS        RESTARTS   AGE   IP            NODE     NOMINATED NODE   READINESS GATES
nginx1-654cb56c4-5fsnh   0/1     Terminating   0          85s   <none>        node01   <none>           <none>
nginx1-654cb56c4-kw6d5   1/1     Running       0          44m   10.244.2.19   node02   <none>           <none>
nginx1-654cb56c4-n8wn7   0/1     Terminating   0          85s   10.244.1.16   node01   <none>           <none>
nginx2                   1/1     Running       0          29m   10.244.2.21   node02   <none>           <none>
[root@master01 ~]# 
13、容器副本扩容-------修改文件
[root@master01 ~]# kubectl edit deployment nginx1 -n xy102 



replicas: 3



deployment.apps/nginx1 edited
[root@master01 ~]# kubectl get pod -n xy102 -o wide
NAME                     READY   STATUS    RESTARTS   AGE   IP            NODE     NOMINATED NODE   READINESS GATES
nginx1-654cb56c4-6q4g9   1/1     Running   0          17s   10.244.1.17   node01   <none>           <none>
nginx1-654cb56c4-k84cb   1/1     Running   0          17s   10.244.1.18   node01   <none>           <none>
nginx1-654cb56c4-kw6d5   1/1     Running   0          46m   10.244.2.19   node02   <none>           <none>
nginx2                   1/1     Running   0          31m   10.244.2.21   node02   <none>           <none>

二、service类型以及工作原理

#pod的ip地址随着pod的生命周期有可能会发生改变,内部访问我们通过pod的ip可以直接访问,外部访问是否会收到影响呢?

service类型以及工作原理

service如何与pod进行关联,这种关联不受pod的ip地址变化的影响。

整个service的端口80和容器的80端口做映射

[root@master01 ~]# kubectl expose deployment nginx1 --port=80 --target-port=80 --name=nginx -n xy102

##前面一个port是集群的service的端口,和容器内的80端口映射。

2.1、service的类型:

1、默认的类型,ClusterIP提供集群内部的一个虚拟ip地址,让其pod来访问的,pod可以通过serviceip直接访问到内部的容器。

内部组件通信使用

2、NodePort:在每个节点(集群的所有节点)都会开放一个端口,外部就可以通过本机的ip+端口(nodeport)访问的容器服务。

每个节点modeport的端口都是一致的,端口范围:30000-32767。

3、LoadBalancer:云平台的运行商(阿里云、腾讯云)提供LoadBalanceder 地址。需要付费的。

提供之后,也是通过访问负载均衡的地址,可以实现pod的流量转发。

4、ExternalName:把service的名字映射到DNS的域名上,让pod去访问集群外部的资源,而且设置为此类型,service将不能提供四层负载均衡的服务。

5、ingress:可以实现域名访问,既可以做七层转发也可以做四层转发

2.2、开启端口NodePort------为了让service和所有节点映射端口,这里端口是随机映射的。

[root@master01 ~]# kubectl edit svc -n xy102 nginx
  type: NodePort   ##开启节点宿主机端口映射
service/nginx edited

##查看services网络端口映射情况
[root@master01 ~]# kubectl get svc -n xy102 nginx
NAME    TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
nginx   NodePort   10.96.117.184   <none>        80:30834/TCP   71m
[root@master01 ~]# netstat -antp | grep 30834

##nginx1---1页面设置
[root@master01 ~]# kubectl exec -it -n xy102 nginx1-654cb56c4-6q4g9 bash   
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@nginx1-654cb56c4-6q4g9:/# echo 123 > /usr/share/nginx/html/index.html 
root@nginx1-654cb56c4-6q4g9:/# exit
exit

##nginx1---2页面设置
[root@master01 ~]# kubectl exec -it -n xy102 nginx1-654cb56c4-k84cb bash  
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@nginx1-654cb56c4-k84cb:/# echo 456 > /usr/share/nginx/html/index.html 
root@nginx1-654cb56c4-k84cb:/# exit
exit

##nginx1---3页面设置
[root@master01 ~]# kubectl exec -it -n xy102 nginx1-654cb56c4-kw6d5 bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@nginx1-654cb56c4-kw6d5:/# echo 789 > /usr/share/nginx/html/index.html
root@nginx1-654cb56c4-kw6d5:/# exit
exit


curl测试是否映射完成-----30834(宿主机)--->80(service)------>80(容器)
[root@master01 ~]# curl 192.168.168.81:30834
789
[root@master01 ~]# curl 192.168.168.81:30834
123
[root@master01 ~]# curl 192.168.168.81:30834
456
[root@master01 ~]# curl 192.168.168.81:30834
789

2、查看命名空间xy102的nginx1集群详细信息
[root@master01 ~]# kubectl describe deployments.apps nginx1 -n xy102
Name:                   nginx1
Namespace:              xy102
CreationTimestamp:      Wed, 28 Aug 2024 10:30:40 +0800
Labels:                 app=nginx1
Annotations:            deployment.kubernetes.io/revision: 1
Selector:               app=nginx1
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=nginx1
  Containers:
   nginx:
    Image:        nginx:1.22
    Port:         <none>
    Host Port:    <none>
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Progressing    True    NewReplicaSetAvailable
  Available      True    MinimumReplicasAvailable
OldReplicaSets:  <none>
NewReplicaSet:   nginx1-654cb56c4 (3/3 replicas created)
Events:          <none>
3、修改同命名空间的无资源对象的nginx2加入label:app:nginx1,从而实现通过标签加入负载均衡
[root@master01 ~]# kubectl edit pod nginx2 -n xy102

      9   labels:
     10     app: nginx1


pod/nginx2 edited

修改nginx2默认访问页面
[root@master01 ~]# kubectl exec -it nginx2 -n xy102 bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@nginx2:/# echo 222 > /usr/share/nginx/html/index.html
root@nginx2:/# exit
exit

##master主机测试
[root@master01 ~]# curl 192.168.168.81:30834
222
[root@master01 ~]# curl 192.168.168.81:30834
789
[root@master01 ~]# curl 192.168.168.81:30834
456
[root@master01 ~]# curl 192.168.168.81:30834
123


##node01节点测试
[root@node01 ~]# curl 192.168.168.82:30834
789
[root@node01 ~]# curl 192.168.168.82:30834
456
[root@node01 ~]# curl 192.168.168.82:30834
123
[root@node01 ~]# curl 192.168.168.82:30834
222



##node02节点测试
[root@node02 ~]# curl 192.168.168.83:30834
222
[root@node02 ~]# curl 192.168.168.83:30834
789
[root@node02 ~]# curl 192.168.168.83:30834
456
[root@node02 ~]# curl 192.168.168.83:30834
123


##查看nginx2的容器的详细信息
[root@master01 ~]# kubectl describe pod nginx2 -n xy102
Name:         nginx2
Namespace:    xy102
Priority:     0
Node:         node02/192.168.168.83
Start Time:   Wed, 28 Aug 2024 10:46:07 +0800
Labels:       app=nginx1  ##标签已改

在这里插入图片描述

4、重启查看标签
[root@master01 ~]# kubectl delete pod -n xy102 nginx1-654cb56c4-kw6d5 

[root@master01 ~]# kubectl get pod -o wide -n xy102

[root@master01 ~]# kubectl describe pod nginx1-654cb56c4-dgvjd -n xy102


在这里插入图片描述

5、总结:

NodePort:service根据标签来匹配对应的pod,只要标签匹配,都能转发到指定的pod内的容器。

总结:

service的类型:

1、默认类型,ClusterIP 提供集群内部的一个虚拟ip地址,让其他的pod来访问的,pod可以通过这个servicip直接访问到内部的容器。
内部组件通信使用。对内
2、NodePort: 在每个节点(集群的所有节点)都会开放一个端口,外部就可以通过本机的ip+端口(nodeport)访问pod内的容器服务。
每个节点nodeport的端口都是一致的。端口是有范围的:30000-32767。
NodePort: service根据标签来匹配对应的pod。只要标签匹配,都能转发到指定的pod内的容器。
3、LoadBalancer: 云平台的运营商(阿里云,腾讯云)提供loadbalancer的地址。需要付费的。
提供之后,也是通过访问负载均衡的地址,可以实现pod的流量转发。
4、ExternalName: 把service的名字映射到DNS的域名上,让pod去访问集群外部的资源,而且设置为此类型,service不能提供四层
负载均衡的服务。

[root@master01 ~]# kubectl get endpoints -n xy102 
NAME    ENDPOINTS                                                  AGE
nginx   10.244.1.17:80,10.244.1.18:80,10.244.2.21:80 + 1 more...   140m

三、k8s项目的生命周期

1、在k8s项目的生命周期:

发布—>修改---->更新----->回滚----->销毁

[root@master01 ~]# curl -I 192.168.168.81:30834
HTTP/1.1 200 OK
Server: nginx/1.22.1
Date: Wed, 28 Aug 2024 05:46:58 GMT
Content-Type: text/html
Content-Length: 4
Last-Modified: Wed, 28 Aug 2024 04:39:59 GMT
Connection: keep-alive
ETag: "66ceaa1f-4"
Accept-Ranges: bytes

2、更新版本------滚动点建立

[root@master01 ~]# kubectl set image deployment/nginx1 nginx=nginx:1.18 -n xy102
deployment.apps/nginx1 image updated
[root@master01 ~]# kubectl get pod -o wide -n xy102
NAME                      READY   STATUS    RESTARTS   AGE    IP            NODE     NOMINATED NODE   READINESS GATES
nginx1-86f8f84f7f-dw4q4   1/1     Running   0          33s    10.244.1.19   node01   <none>           <none>
nginx1-86f8f84f7f-hhj62   1/1     Running   0          30s    10.244.1.20   node01   <none>           <none>
nginx1-86f8f84f7f-kwdxz   1/1     Running   0          31s    10.244.2.23   node02   <none>           <none>
nginx2                    1/1     Running   0          3h2m   10.244.2.21   node02   <none>           <none>

##更新回滚点
[root@master01 ~]# kubectl set image deployment/nginx1 nginx=nginx:1.18 --record -n xy102

[root@master01 ~]# kubectl rollout history deployment/nginx1 -n xy102

12        kubectl set image deployment/nginx1 nginx=nginx:1.18 --record=true --namespace=xy102

[root@master01 ~]# curl -I 192.168.168.81:30834
HTTP/1.1 200 OK
Server: nginx/1.18.0
Date: Wed, 28 Aug 2024 05:49:33 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 21 Apr 2020 14:09:01 GMT
Connection: keep-alive
ETag: "5e9efe7d-264"
Accept-Ranges: bytes

3、查看回滚点

[root@master01 ~]# kubectl rollout history deployment/nginx1 -n xy102
deployment.apps/nginx1 
REVISION  CHANGE-CAUSE
1         <none>
2         <none>
#数字大小决定了距离上次更新操作的远近,数字越大,就是最近的一次操作。

4、回滚到指定的点

[root@master01 ~]# kubectl rollout undo deployment/nginx1 --to-revision=1 -n xy102
deployment.apps/nginx1 rolled back
[root@master01 ~]# curl -I 192.168.168.81:30834
查看版本

[root@master01 ~]# vim /etc/docker/daemon.json 

{
  "registry-mirrors": [
                "https://hub-mirror.c.163.com",
                "https://docker.m.daocloud.io",
                "https://ghcr.io",
                "https://mirror.baidubce.com",
                "https://docker.nju.edu.cn"
   ],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  }
}
[root@master01 ~]# kubectl rollout undo deployment/nginx1 --to-revision=7 -n xy102



[root@master01 ~]# kubectl set image deployment/nginx1 nginx=nginx:1.20 --record -n xy102
7         kubectl set image deployment/nginx1 nginx=nginx:1.12 --record=true --namespace=xy102


[root@master01 ~]# kubectl get pod -n xy102

[root@master01 ~]# curl -I 192.168.168.81:30834
HTTP/1.1 200 OK
Server: nginx/1.12.2

[root@master01 ~]# kubectl rollout undo deployment/nginx1 --to-revision=13 -n xy102

##13        kubectl set image deployment/nginx1 nginx=nginx:1.20 --record=true --namespace=xy102

[root@master01 ~]# curl -I 192.168.168.81:30834
HTTP/1.1 200 OK
Server: nginx/1.20.2



5、查看deployment资源镜像

[root@master01 ~]# kubectl get deployments.apps nginx1 -n xy102
NAME     READY   UP-TO-DATE   AVAILABLE   AGE
nginx1   3/3     3            3           4h13m

6、删除deployment资源镜像

[root@master01 ~]# kubectl delete deployments.apps nginx1 -n xy102
deployment.apps "nginx1" deleted

7、删除无资源镜像的pod

[root@master01 ~]# kubectl delete pod nginx2 -n xy102
pod "nginx2" deleted
[root@master01 ~]# kubectl get pod -n xy102  ##查看命名空间的pod
No resources found in xy102 namespace.

8、查看命名空间里面的service

[root@master01 ~]# kubectl get svc -n xy102 
NAME    TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
nginx   NodePort   10.96.117.184   <none>        80:30834/TCP   3h26m

9、删除service

[root@master01 ~]# kubectl delete svc -n xy102 nginx
service "nginx" deleted

10、查看命名空间

[root@master01 ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   2d
kube-node-lease   Active   2d
kube-public       Active   2d
kube-system       Active   2d
xy102             Active   4h32m

11、创建命名空间

[root@master01 ~]# kubectl create ns xy102 
namespace/xy102 created
[root@master01 ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   2d
kube-node-lease   Active   2d
kube-public       Active   2d
kube-system       Active   2d
xy102             Active   4s

12、删除指定命名空间

[root@master01 ~]# kubectl delete ns xy102 
namespace "xy102" deleted

USTER-IP EXTERNAL-IP PORT(S) AGE
nginx NodePort 10.96.117.184 80:30834/TCP 3h26m


## 9、删除service

[root@master01 ~]# kubectl delete svc -n xy102 nginx
service “nginx” deleted


## 10、查看命名空间

[root@master01 ~]# kubectl get ns
NAME STATUS AGE
default Active 2d
kube-node-lease Active 2d
kube-public Active 2d
kube-system Active 2d
xy102 Active 4h32m


## 11、创建命名空间

[root@master01 ~]# kubectl create ns xy102
namespace/xy102 created
[root@master01 ~]# kubectl get ns
NAME STATUS AGE
default Active 2d
kube-node-lease Active 2d
kube-public Active 2d
kube-system Active 2d
xy102 Active 4s


## 12、删除指定命名空间

[root@master01 ~]# kubectl delete ns xy102
namespace “xy102” deleted




本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2082435.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软件设计原则之依赖倒置原则

依赖倒置原则&#xff08;Dependency Inversion Principle, DIP&#xff09;是软件设计中一个非常重要的原则&#xff0c;它属于面向对象设计的SOLID原则之一。这个原则的核心在于通过抽象来降低模块间的耦合度&#xff0c;使得系统更加灵活和可维护。 目录 依赖倒置原则的基本…

对标GPT-4o,科大讯飞正以大模型重塑语音产业

每个科技时代&#xff0c;都有每个时代的“入口”和“推手”。 在PC时代&#xff0c;浏览器和搜索引擎是主要入口&#xff0c;用户通过键盘和鼠标进行交互。移动互联时代&#xff0c;APP和应用商店成为典型入口&#xff0c;用户用手指和触摸屏进入互联网世界。而在眼下的AI时代…

8月27c++

提示并输入一个字符串&#xff0c;统计字符串中字母、数字、空格和其他字符的个数 代码 #include <iostream> #include <cstring> using namespace std;int main() {string str;cout<<"输入一个字符串";getline(cin,str);//输入字符串int lenstr…

【vulhub】Weblogic WLS Core Components 反序列化命令执行漏洞(CVE-2018-2628)

简单来说就是先用序列化工具ysoserial启动一个JRMP服务&#xff0c;加载先相关漏洞利用链&#xff0c;加载你要执行的恶意代码。 并将上述结果通过序列化工具ysoserial将我们的恶意代码进行一个序列化操作。 第二步就是将我们的exp去加载ysoserial序列化后的数据&#xff0c;后…

vue侧边栏

在Vue中创建一个侧边栏&#xff08;Sidebar&#xff09;是一个常见的需求&#xff0c;特别是在构建管理界面或需要导航菜单的应用时。侧边栏通常用于展示应用的导航链接或菜单项&#xff0c;用户可以通过点击这些链接来访问应用的不同部分。 <template><el-tree :data…

openEuler安装Docker和踩坑分析

我是用的openEuler版本&#xff1a;20.03 LTS SP1&#xff0c;安装在虚拟机中&#xff0c;使用ssh连接 在openEuler上安装Docker还是让我踩了不少坑&#xff0c;先看看这些坑是如何产生的 虽然官方没有说openEuler是基于什么开源系统开发的&#xff0c;但大致内容和CentOS相似…

【教学新纪元】大学电工电子课堂大变身!SmartEDA电路仿真软件助你高效授课✨

在快速迭代的科技时代&#xff0c;教学方式的创新成为了提升教学质量的关键。作为一位深耕电工电子原理教学领域的老师&#xff0c;你是否曾梦想过将复杂的电路理论以直观、互动的方式展现给学生&#xff1f;今天&#xff0c;就让我们一起探索如何利用SmartEDA电路仿真软件&…

鸿蒙开发5.0【基于lycium的开源c库编译与集成】

场景描述 对于c库编译问题&#xff0c;应用经常会遇到如下业务诉求 场景一&#xff1a;基于HarmonyOS编译开源C库 场景二&#xff1a;开源c库编译完成后的集成 方案描述 场景一&#xff1a; 需要使用开源c库 lycium的使用说明&#xff1a;lycium的特点就是自动化编译&am…

8.28-回顾+容器与主机之间的通信+跨主机容器之间的通信

一、回顾 1.启动docker systemctl start docker 2.拉取registry docker pull registry 3.启动镜像&#xff0c;同时挂载目录&#xff08;保存镜像&#xff09;端口映射5000 docker run -d -v /regist/:/var/lib/registry/ -p5000:5000 registry:latest 4.修改/etc/docker/d…

培训第三十八天(上传镜像,私有仓库下载镜像,跨主机容器间的通信,harbor软件包下载)

1、harbor软件包下载 https://github.com/search?qharbor&typerepositories 2、出现拒绝连接错误&#xff0c;可能是由于容器没开 # 问题解决&#xff1a;[rootdocker ~]# curl localhost:5000/v2/_catalogcurl: (7) Failed connect to localhost:5000; 拒绝连接[rootdoc…

pdf怎么转换成excel?掌握好这9个pdf转换方法就够了(全)

pdf怎么转换成excel&#xff1f;日常的办公生活中&#xff0c;我们经常需要接触很多文档格式&#xff0c;而pdf格式文件因为其稳定性和安全性受到很多办公人士的喜爱。但PDF文件不能直接编辑&#xff0c;很多小伙伴们就会出现关于pdf格式转换的难题&#xff0c;比如说想把一份带…

MATLAB虫害检测预警系统

一、课题介绍 本课题是基于MATLAB颜色的植物虫害检测识别&#xff0c;可以辨析植物叶子属于是轻度虫害&#xff0c;中度虫害&#xff0c;严重虫害&#xff0c;正常等四个级别。算法流程&#xff1a;每种等级叶子分别放在同一个文件夹&#xff0c;训练得到每个文件夹每个叶…

SSL安全认证网关:保障网络安全的强大护盾

随着信息技术的飞速发展&#xff0c;我们的生活和工作越来越依赖于网络&#xff0c;但与此同时&#xff0c;网络安全威胁也日益严峻。为了保护我们的信息安全&#xff0c;各种安全技术和产品应运而生&#xff0c;其中SSL安全认证网关就是一种非常重要的安全防护工具。 今天&…

3款伪原创工具,为你轻松一键生成原创文案

在当今信息爆炸的时代&#xff0c;原创内容的重要性愈发凸显。然而&#xff0c;对于许多创作者来说&#xff0c;创作原创文案却是一项费时费力的挑战。幸运的是&#xff0c;随着科技的进步&#xff0c;现在有三款伪原创工具能够帮助你轻松一键生成原创文案&#xff0c;为你节省…

DNS服务器的配置(服务名named,端口53)

目录 前言 配置文件 DNS服务器的配置 主配置文件 扩展配置文件 区域配置文件 重启服务 配置防火墙 配置客户端dns 前言 DNS服务器的主要作用是将人类可读的域名转换为机器可读的IP地址&#xff0c;从而方便用户访问互联网资源。 在互联网中&#xff0c;设备需要通过I…

基于资源管控+TiCDC实现多业务融合容灾测试

作者&#xff1a; 数据源的TiDB学习之路 原文来源&#xff1a; https://tidb.net/blog/959b8d07 背景 金融机构越来越多的选择将多套业务系统融合到一套分布式数据库集群来支撑&#xff0c;一方面可以节约硬件成本&#xff0c;另一方面可以简化运维复杂性。多租户能力及资源…

【电控笔记z26】串级PID单环位置PID

1P-PI 传函(梅森法) : 2PI-P 3PID 三者等效

HyperMesh概述与有限元分析简介

1.1 HyperMesh 概述 本节将介绍有限单元法基本原理&#xff0c;HyperMesh 软件基本功能及界面介绍&#xff0c;获取在线帮助等内容。 1.1.1 有限元分析方法简介 有限单元法&#xff08;FEM&#xff09;是一种可以精确预测复杂结构在外界载荷作用下响应的方法&#xff0c;该数…

问界都回暖了,是谁还在持续掉队?

文/王俣祺 导语&#xff1a;在8月份的最后一个完整周&#xff0c;国内汽车市场的销量表现全面提升&#xff0c;乘用车市场销量达到了46.6万辆车&#xff0c;环比增长13.1%。其中&#xff0c;新能源汽车销量达到24.2万辆&#xff0c;环比增长11.6%&#xff0c;市场渗透率达到了…

《探索现代JavaScript中的异步编程》

探索现代JavaScript中的异步编程 随着Web应用变得越来越复杂&#xff0c;前端开发中对异步处理的需求也日益增加。JavaScript 作为 Web 开发中最主要的语言之一&#xff0c;提供了多种异步编程的方法来帮助开发者编写高效、可维护的应用程序。本文将介绍几种现代 JavaScript 中…