Kubernetes 核心对象

news2024/11/14 18:50:27

image.png

Kubernetes 中的所有内容都被抽象为“资源”,如 Pod、Service、Node 等都是资源。“对象”就是“资源”的实例,是持久化的实体。Kubernetes 使用这些实体去表示整个集群的状态。它们主要描述了如下信息:

  • 哪些容器化应用正在运行(以及在哪些节点上运行)
  • 可以被应用使用的资源
  • 关于应用运行时表现的策略,比如重启策略、升级策略以及容错策略

Kubernetes 支持多种不同的方式来创建和管理 Kubernetes 对象,比如:

  • 采用kubectl的命令方式
  • yaml文件方式

Namespace

Namespace的主要作用是,将同一集群中的资源划分为相互隔离的组

  • 同一Namespace内的资源名称要唯一,不同Namespace
    资源名称没有这个要求。
  • Namespace作用域仅针对带有名字空间的对象,例如 Deployment、Service 等, 对于不带Namespace的对象不适用,例如 StorageClass、Node、PersistentVolume 等。
  • 对于所有资源的操作默认会使用default命名空间,这个默认空间可以通过命令指定。

查看哪些资源在名字空间中

查看哪些 Kubernetes 资源在名字空间中,哪些不在名字空间中:

# 位于名字空间中的资源
kubectl api-resources --namespaced=true

# 不在名字空间中的资源
kubectl api-resources --namespaced=false

设置默认操作的命名空间

你可以永久保存名字空间,以用于对应上下文中所有后续 kubectl 命令。

kubectl config set-context --current --namespace=<名字空间名称>
# 验证
kubectl config view --minify | grep namespace:

查看名字空间

kubectl get namespace或者kubectl get ns
输出结果:

[root@k8s-master ~]# kubectl get namespace
NAME              STATUS   AGE
default           Active   179m
kube-node-lease   Active   179m
kube-public       Active   179m
kube-system       Active   179m
kuboard           Active   135m
nginx-ingress     Active   144m
  • default: Kubernetes 包含这个名字空间,以便于你无需创建新的名字空间即可开始使用新集群。
  • kube-node-lease: 该名字空间包含用于与各个节点关联的 Lease(租约)对象。 节点租约允许 kubelet 发送心跳, 由此控制面能够检测到节点故障。
  • kube-public: 所有的客户端(包括未经身份验证的客户端)都可以读取该名字空间。 该名字空间主要预留为集群使用,以便某些资源需要在整个集群中可见可读。 该名字空间的公共属性只是一种约定而非要求。
  • kube-system: 该名字空间用于 Kubernetes 系统创建的对象。

查看命名空间详细信息

kubectl describe namespaces <name>

示例:

[root@k8s-master ~]# kubectl describe namespace test
Name:         test
Labels:       <none>
Annotations:  <none>
Status:       Active

No resource quota.

No LimitRange resource.
[root@k8s-master ~]# 

新建命名空间

  1. 新建一个名为 my-namespace.yaml 的 YAML 文件,并写入下列内容:
apiVersion: v1
kind: Namespace
metadata:
  name: <insert-namespace-name-here>

然后运行:

kubectl create -f ./my-namespace.yaml

或者,你可以使用下面的命令创建名字空间:

kubectl create ns <insert-namespace-name-here>
# 新建命名空间
kubectl create ns 命名空间名称

示例:

[root@k8s-master ~]# kubectl create ns test
namespace/test created
[root@k8s-master ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   3h4m
kube-node-lease   Active   3h4m
kube-public       Active   3h4m
kube-system       Active   3h4m
kuboard           Active   140m
nginx-ingress     Active   149m
test              Active   8s

删除空间

# 删除现有命名空间, 并且会删除空间下的全部资源
kubectl delete ns 命名空间名称

示例:

[root@k8s-master ~]# kubectl delete ns test
namespace "test" deleted
[root@k8s-master ~]# 
[root@k8s-master ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   3h6m
kube-node-lease   Active   3h6m
kube-public       Active   3h6m
kube-system       Active   3h6m
kuboard           Active   142m
nginx-ingress     Active   151m

Pod(容器组)

Pod是kubernetes集群进行管理的最小单元,程序要运行必须部署在容器中,而容器必须存在于Pod中。
Pod可以认为是容器的封装,一个Pod中可以存在一个或者多个容器,这些容器共享存储、网络、以及怎样运行这些容器的声明。
Pod是不能被外网直接访问的,所以Pod 通常不是直接创建的,而是使用工作负载资源创建,比如 Deployment。

命令方式管理Pod

# 查看所有运行的pod
kubectl get pod -A

# 查看指定Namespace下的Pod
kubectl get pod [-n 命名空间]  #(默认default)

# 创建Pod
kubectl run pod名称 --image=镜像名称

# 查看Pod详细信息
kubectl describe pod pod名称

# 删除pod
kubectl delete pod pod名称 [-n 命名空间]  #(默认default)

# 查看pod输出的日志
kubectl logs -f pod名称

# 进去pod容器内部
kubectl exec [-n 命名空间] -it pod名称 [-c 容器名称] -- bash
kubectl exec -n test -it nginx-tomcate-pod -c tomcate -- bash  

# 查看kubernetes给Pod分配的ip信息,并且通过ip和容器的端口,可以直接访问
kubectl get pod -owide

以yml方式管理Pod

新建yml文件:

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: 运行的pod名称
  name: pod名称
  namespace: 命名空间
spec:
  containers:
  - image: 镜像名称
    name: 容器名称
  - image: 镜像名称
    name: 容器名称

执行命令:

# 启动Pod:
kubectl apply -f yaml文件名称
# 删除Pod:
kubectl delete -f yaml文件名称

示例:在一个Pod中运行nginx和tomcate,新建一个nginx-tomcate-pod.yml:

apiVersion: v1
kind: Pod
metadata:
  name: nginx-tomcate-pod
  namespace: test
spec:
  containers:
  - name: nginx
    image: daocloud.io/library/nginx:1.14.2
    ports:
    - containerPort: 80
  - name: tomcate
    image: daocloud.io/library/tomcat:8.0.45
    ports:
    - containerPort: 8080

启动Pod

pod/nginx-tomcate-pod configured
[root@k8s-master ~]# kubectl get pod nginx-tomcate-pod -n test
NAME                READY   STATUS             RESTARTS   AGE
nginx-tomcate-pod   1/2     ImagePullBackOff   0          33m
[root@k8s-master ~]# kubectl get pod nginx-tomcate-pod -n test
NAME                READY   STATUS    RESTARTS   AGE
nginx-tomcate-pod   2/2     Running   1          36m

通过命令查询Pod详细信息kubectl describe pod nginx-tomcate-pod -n test

[root@k8s-master ~]# kubectl describe pod nginx-tomcate-pod -n test
Name:         nginx-tomcate-pod
Namespace:    test
Priority:     0
Node:         k8s-worker/192.168.232.8
Start Time:   Fri, 21 Apr 2023 23:47:01 +0800
Labels:       <none>
Annotations:  cni.projectcalico.org/podIP: 10.100.254.130/32
              cni.projectcalico.org/podIPs: 10.100.254.130/32
Status:       Running
IP:           10.100.254.130
IPs:
  IP:  10.100.254.130
Containers:
  nginx:
    Container ID:   docker://ead4ad64590ede48491281aa1b9fe2390a79ca7746ae3cdd05ea03668bb3544e
    Image:          daocloud.io/library/nginx:1.14.2
    Image ID:       docker-pullable://daocloud.io/library/nginx@sha256:706446e9c6667c0880d5da3f39c09a6c7d2114f5a5d6b74a2fafd24ae30d2078
    Port:           80/TCP
    Host Port:      0/TCP
    State:          Running
      Started:      Sat, 22 Apr 2023 00:19:54 +0800
    Last State:     Terminated
      Reason:       Completed
      Exit Code:    0
      Started:      Fri, 21 Apr 2023 23:50:59 +0800
      Finished:     Sat, 22 Apr 2023 00:19:53 +0800
    Ready:          True
    Restart Count:  1
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-lckbp (ro)
  tomcate:
    Container ID:   docker://d773ef81e8ce60e0055357fcccaa92b62ca9718de2bbcd66325aa9998df28eb0
    Image:          daocloud.io/library/tomcat:8.0.45
    Image ID:       docker-pullable://daocloud.io/library/tomcat@sha256:08132ab8b2c606cfb78a0ef9e80e1e724331cab10058135b475f23c032738350
    Port:           8080/TCP
    Host Port:      0/TCP
    State:          Running
      Started:      Sat, 22 Apr 2023 00:21:52 +0800
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-lckbp (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             True 
  ContainersReady   True 
  PodScheduled      True 
Volumes:
  default-token-lckbp:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-lckbp
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                 node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type     Reason     Age                  From               Message
  ----     ------     ----                 ----               -------
  Warning  Failed     57m                  kubelet            Failed to pull image "nginx:1.14.2": rpc error: code = Unknown desc = Error response from daemon: Get https://registry-1.docker.io/v2/library/nginx/manifests/1.14.2: Get https://auth.docker.io/token?scope=repository%3Alibrary%2Fnginx%3Apull&service=registry.docker.io: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
  Warning  Failed     56m (x2 over 56m)    kubelet            Failed to pull image "tomcate:8.5.68": rpc error: code = Unknown desc = Error response from daemon: pull access denied for tomcate, repository does not exist or may require 'docker login': denied: requested access to the resource is denied
  Normal   BackOff    55m (x2 over 56m)    kubelet            Back-off pulling image "nginx:1.14.2"
  Warning  Failed     55m (x2 over 56m)    kubelet            Error: ImagePullBackOff
  Normal   Pulling    55m (x3 over 57m)    kubelet            Pulling image "nginx:1.14.2"
  Warning  Failed     55m (x3 over 57m)    kubelet            Error: ErrImagePull
  Normal   Pulling    55m (x3 over 57m)    kubelet            Pulling image "tomcate:8.5.68"
  Warning  Failed     55m (x2 over 56m)    kubelet            Failed to pull image "nginx:1.14.2": rpc error: code = Unknown desc = Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
  Warning  Failed     55m (x3 over 56m)    kubelet            Error: ErrImagePull
  Normal   Scheduled  39m                  default-scheduler  Successfully assigned test/nginx-tomcate-pod to k8s-worker
  Normal   BackOff    37m (x73 over 56m)   kubelet            Back-off pulling image "tomcate:8.5.68"
  Warning  Failed     27m (x115 over 56m)  kubelet            Error: ImagePullBackOff

通过图形界面查看:
image.png

通过curl命令测试:

curl 10.100.254.130

Deployment(部署)

定义 Pod 的期望状态,实现应用程序的版本控制和滚动更新等功能。

命令方式管理

# 基于Deployment启动容器
kubectl create deployment deployment名称 --image=镜像名称
# 用deployment启动的容器会在被删除后自动再次创建,达到故障漂移的效果
# 需要使用deploy的方式删除deploy
# 查看现在的deployment
kubectl get deployment

# 删除deployment
kubectl delete deployment deployment名称

# 基于Deployment启动容器并设置Pod集群数
kubectl create deployment deployment名称 --image=镜像名称 --replicas 集群个数

命令方式管理

新增nginx-tomcate-deployment.yml文件

apiVersion: apps/v1
kind: Deployment
metadata:                        # metadata字段包含对Deployment的描述信息
  name: nginx-tomcate-deployment
  namespace: test
  labels:
    app: nginx-tomcate-pod      # 标签字段用于识别Pod
spec:
  replicas: 2                   # 定义副本数量
  selector:
    matchLabels:
      app: nginx-tomcate-pod
  template:
    metadata:
      labels:
        app: nginx-tomcate-pod
    spec:
      containers:
      # 定义nginx容器
      - name: nginx
        image: daocloud.io/library/nginx:1.14.2
        ports:
        - containerPort: 80
          protocol: TCP
        resources:
          requests:
            cpu: 1             # 限定CPU资源为1核
            memory: 1Gi        # 限定内存资源为1G
          limits:
            cpu: 1             # 限定CPU资源为1核
            memory: 1Gi        # 限定内存资源为1G
      # 定义tomcat容器
      - name: tomcat
        image: daocloud.io/library/tomcat:8.0.45
        ports:
        - containerPort: 8080
          protocol: TCP
        resources:
          requests:
            cpu: 1             # 限定CPU资源为1核
            memory: 1Gi        # 限定内存资源为1G
          limits:
            cpu: 1             # 限定CPU资源为1核
            memory: 1Gi        # 限定内存资源为1G

通过Kubernetes的Deployment去定义一个Pod:

  1. Deployment名称为nginx-tomcate-deployment、Pod名称为nginx-tomcate-pod,Pod包含nginxtomcate两个容器。
  2. nginx使用daocloud.io/library/nginx:1.14.2镜像,使用80端口。
  3. tomcate使用daocloud.io/library/tomcat:8.0.45镜像,使用8080端口。
  4. 限定硬件资源为CPU1核,内存1G。
  5. 命名空间为test
[root@k8s-master ~]# kubectl describe deployment nginx-tomcate-deployment -n test
Name:                   nginx-tomcate-deployment
Namespace:              test
CreationTimestamp:      Sat, 22 Apr 2023 02:14:02 +0800
Labels:                 app=nginx-tomcate-pod
Annotations:            deployment.kubernetes.io/revision: 1
Selector:               app=nginx-tomcate-pod
Replicas:               2 desired | 2 updated | 2 total | 2 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels:  app=nginx-tomcate-pod
  Containers:
   nginx:
    Image:        daocloud.io/library/nginx:1.14.2
    Port:         80/TCP
    Host Port:    0/TCP
    Environment:  <none>
    Mounts:       <none>
   tomcat:
    Image:        daocloud.io/library/tomcat:8.0.45
    Port:         8080/TCP
    Host Port:    0/TCP
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Progressing    True    NewReplicaSetAvailable
  Available      True    MinimumReplicasAvailable
OldReplicaSets:  <none>
NewReplicaSet:   nginx-tomcate-deployment-5c5d9d9c84 (2/2 replicas created)
Events:
  Type    Reason             Age                  From                   Message
  ----    ------             ----                 ----                   -------
  Normal  ScalingReplicaSet  9m45s                deployment-controller  Scaled up replica set nginx-tomcate-deployment-5c5d9d9c84 to 1
  Normal  ScalingReplicaSet  97s                  deployment-controller  Scaled down replica set nginx-tomcate-deployment-5c5d9d9c84 to 1
  Normal  ScalingReplicaSet  83s (x2 over 2m12s)  deployment-controller  Scaled up replica set nginx-tomcate-deployment-5c5d9d9c84 to 2
[root@k8s-master ~]# 

image.png

Service(服务)

Service 是将运行在一个或一组 Pod 上的网络应用程序公开为网络服务的方法,它为一组 Pod 提供单一的入口,实现负载均衡、服务发现等功能。

Kubernetes ServiceTypes 允许指定你所需要的 Service 类型,Type 的取值以及行为如下:

  • ClusterIP:通过集群的内部 IP 暴露服务,选择该值时服务只能够在集群内部访问。 这也是你没有为服务显式指定 type 时使用的默认值。 你可以使用 Ingress 或者 Gateway API 向公众暴露服务。

  • NodePort:通过每个节点上的 IP 和静态端口(NodePort)暴露服务。 为了让节点端口可用,Kubernetes 设置了集群 IP 地址,这等同于你请求 type: ClusterIP 的服务。

  • LoadBalancer:使用云提供商的负载均衡器向外部暴露服务。 外部负载均衡器可以将流量路由到自动创建的 NodePort 服务和 ClusterIP 服务上。

  • ExternalName:通过返回 CNAME 记录和对应值,可以将服务映射到 externalName 字段的内容(例如,foo.bar.example.com)。 无需创建任何类型代理。

ClusterIP方式

ClusterIP (虚拟 IP 寻址机制)方式是集群内部Pod之间的访问方式。

image.png

# 通过生成service映射一个Deployment下的所有pod中的某一个端口的容器
kubectl expose deployment Deployment名称 --port=Service端口号 --target-port=Pod内容器端口
[root@k8s-master ~]# kubectl expose deployment nginx-tomcate-deployment --port=8888 --target-port=80 -n test
service/nginx-tomcate-deployment exposed

通过```kubectl get service````查看映射情况:

[root@k8s-master ~]# kubectl get service -n test
NAME                       TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE
nginx-tomcate-deployment   ClusterIP   10.96.68.183   <none>        8888/TCP   2m31s
[root@k8s-master ~]# curl 10.96.68.183:8888
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</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
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

也可以通过 Deployment名称.namespace名称.svc作为域名访问。

NodePort方式

ClusterIP的方式只能在Pod内部实现访问,但是一般需要对外暴露网关,所以需要NodePort的方式Pod外暴露访问

# 通过生成service映射一个Deployment下的所有pod中的某一个端口的容器
kubectl expose deployment Deployment名称 --port=Service端口号 --target-port=Pod内容器端口 --type=NodePort
[root@k8s-master ~]# kubectl get service -n test
NAME                       TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE
nginx-tomcate-deployment   ClusterIP   10.96.68.183   <none>        8888/TCP   20m
[root@k8s-master ~]# kubectl delete service nginx-tomcate-deployment -n test
service "nginx-tomcate-deployment" deleted
[root@k8s-master ~]# kubectl expose deployment nginx-tomcate-deployment --port=8888 --target-port=80 --type=NodePort -n test 
service/nginx-tomcate-deployment exposed
[root@k8s-master ~]# kubectl get service -n test
NAME                       TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
nginx-tomcate-deployment   NodePort   10.96.20.252   <none>        8888:30169/TCP   13s

然后在外部服务浏览器输入k8s宿主机IP+端口就可以访问应用了,如http://192.168.232.9:30169/
10.96.20.252:8888是内部容器通信使用的。

使用yml方式声明,新增nginx-tomcate-service.yml文件

apiVersion: apps/v1
kind: Deployment
metadata:                        # metadata字段包含对Deployment的描述信息
  name: nginx-tomcate-deployment
  namespace: test
  labels:
    app: nginx-tomcate-pod      # 标签字段用于识别Pod
spec:
  replicas: 2                   # 定义副本数量
  selector:
    matchLabels:
      app: nginx-tomcate-pod
  template:
    metadata:
      labels:
        app: nginx-tomcate-pod
    spec:
      containers:
      # 定义nginx容器
      - name: nginx
        image: daocloud.io/library/nginx:1.14.2
        ports:
        - containerPort: 80
          protocol: TCP
        resources:
          requests:
            cpu: 1             # 限定CPU资源为1核
            memory: 1Gi        # 限定内存资源为1G
          limits:
            cpu: 1             # 限定CPU资源为1核
            memory: 1Gi        # 限定内存资源为1G
      # 定义tomcat容器
      - name: tomcat
        image: daocloud.io/library/tomcat:8.0.45
        ports:
        - containerPort: 8080
          protocol: TCP
        resources:
          requests:
            cpu: 1             # 限定CPU资源为1核
            memory: 1Gi        # 限定内存资源为1G
          limits:
            cpu: 1             # 限定CPU资源为1核
            memory: 1Gi        # 限定内存资源为1G
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-tomcat-service
  namespace: test
spec:
  selector:
    app: nginx-tomcate-pod
  ports:
    - name: nginx
      port: 8888
      targetPort: 80
    - name: tomcat
      port: 9999
      targetPort: 8080
  type: NodePort
[root@k8s-master ~]# vim nginx-tomcate-deployment.yml 
[root@k8s-master ~]# kubectl apply -f nginx-tomcate-service.yml 
deployment.apps/nginx-tomcate-deployment created
service/nginx-tomcat-service created
[root@k8s-master ~]# kubectl get service -n test
NAME                   TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)                         AGE
nginx-tomcat-service   NodePort   10.96.155.195   <none>        8888:30935/TCP,9999:31186/TCP   30s

Ingress(网关)

暴露 Service 给外部网络,实现应用程序的访问控制、路由等功能,Ingress底层其实就是一个Nginx。

下面是一个将所有流量都发送到同一 Service 的简单 Ingress 示例:

image.png

Ingress 可为 Service 提供外部可访问的 URL、负载均衡流量、终止 SSL/TLS,以及基于名称的虚拟托管。 Ingress 控制器 通常负责通过负载均衡器来实现 Ingress,尽管它也可以配置边缘路由器或其他前端来帮助处理流量。

Ingress 不会公开任意端口或协议。 将 HTTP 和 HTTPS 以外的服务公开到 Internet 时,通常使用 Service.Type=NodePort 或 Service.Type=LoadBalancer 类型的 Service。

在Kuboard直接安装Ingress

image.png
image.png
image.png
image.png

基于名称的虚拟托管

基于名称的虚拟主机支持将针对多个主机名的 HTTP 流量路由到同一 IP 地址上。

image.png

apiVersion: apps/v1
kind: Deployment
metadata:                        # metadata字段包含对Deployment的描述信息
  name: nginx-deployment
  namespace: test
  labels:
    app: nginx-pod      # 标签字段用于识别Pod
spec:
  replicas: 2                   # 定义副本数量
  selector:
    matchLabels:
      app: nginx-pod
  template:
    metadata:
      labels:
        app: nginx-pod
    spec:
      containers:
      # 定义nginx容器
      - name: nginx
        image: daocloud.io/library/nginx:1.14.2
        ports:
        - containerPort: 80
          protocol: TCP
        resources:
          requests:
            cpu: 1             # 限定CPU资源为1核
            memory: 1Gi        # 限定内存资源为1G
          limits:
            cpu: 1             # 限定CPU资源为1核
            memory: 1Gi        # 限定内存资源为1G
---
apiVersion: apps/v1
kind: Deployment
metadata:                        # metadata字段包含对Deployment的描述信息
  name: tomcate-deployment
  namespace: test
  labels:
    app: tomcate-pod      # 标签字段用于识别Pod
spec:
  replicas: 2                   # 定义副本数量
  selector:
    matchLabels:
      app: tomcate-pod
  template:
    metadata:
      labels:
        app: tomcate-pod
    spec:
      containers:
      # 定义tomcat容器
      - name: tomcat
        image: daocloud.io/library/tomcat:8.0.45
        ports:
        - containerPort: 8080
          protocol: TCP
        resources:
          requests:
            cpu: 1             # 限定CPU资源为1核
            memory: 1Gi        # 限定内存资源为1G
          limits:
            cpu: 1             # 限定CPU资源为1核
            memory: 1Gi        # 限定内存资源为1G
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
  namespace: test
spec:
  selector:
    app: nginx-pod
  ports:
    - name: nginx
      port: 8888
      targetPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: tomcate-service
  namespace: test
spec:
  selector:
    app: tomcate-pod
  ports:
    - name: tomcate
      port: 8888
      targetPort: 8080
--- 
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-tomcate-ingress
  namespace: test
spec:
  ingressClassName: nt-ingress
  rules:
  - host: nginx.xiaoyuh.com
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: nginx-service
            port:
              number: 8888
  - host: tomcate.xiaoyuh.com
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: tomcate-service
            port:
              number: 8888
[root@k8s-master ~]# kubectl apply -f   nginx-tomcate-ingress.yml 
deployment.apps/nginx-deployment created
deployment.apps/tomcate-deployment created
service/nginx-service created
service/tomcate-service created
ingress.networking.k8s.io/nginx-tomcate-ingress created
[root@k8s-master ~]# kubectl get ingress -n test
Warning: extensions/v1beta1 Ingress is deprecated in v1.14+, unavailable in v1.22+; use networking.k8s.io/v1 Ingress
NAME                    CLASS        HOSTS                                   ADDRESS         PORTS   AGE
nginx-tomcate-ingress   nt-ingress   nginx.xiaoyuh.com,tomcate.xiaoyuh.com   192.168.232.8   80      32s

image.png

测试

修改本地host

sudo vim /etc/hosts 
192.168.232.8 nginx.xiaoyuh.com
192.168.232.8 tomcate.xiaoyuh.com
admin@wangyuhao ~ % ping tomcate.xiaoyuh.com
PING tomcate.xiaoyuh.com (192.168.232.8): 56 data bytes
64 bytes from 192.168.232.8: icmp_seq=0 ttl=64 time=0.287 ms
64 bytes from 192.168.232.8: icmp_seq=1 ttl=64 time=0.421 ms

测试访问:
http://tomcate.xiaoyuh.com/
http://nginx.xiaoyuh.com/
都能直接通过域名访问

Volume(存储卷)

为 Pod 中的容器提供持久化存储空间。

ConfigMap 和 Secret

用于管理配置和敏感信息,例如数据库连接字符串、API 密钥等。

ReplicaSet(副本集)

控制 Pod 的数量,实现自动伸缩和容错等功能。

StatefulSet(有状态集合)

管理有状态的应用程序,例如数据库、消息队列等。

DaemonSet(守护集合)

确保每个节点上都运行着一个 Pod,用于实现集群级别的服务。

Job 和 CronJob

用于管理批处理任务,例如数据备份、清理等。

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

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

相关文章

ObjectARX中的坐标系以及坐标转换

1 AutoCAD中的坐标系种类 WCS World Coordinate System. The “reference” coordinate system. All other coordinate systems are defined relative to the WCS, which never changes. Values measured relative to the WCS are stable across changes to other coordinate s…

Nginx之正则表达式、location匹配简介以及rewrite重写

引言 在Nginx已经成为很多公司作为前端反向代理服务器的首选&#xff0c;在实际工作中往往会遇到很多跳转(重写URL)的需求。比如更换域名后需要保持旧的域名能跳转到新的域名上、某网页发生改变需要跳转到新的页面、网站防盗链等等需求。如果在后端使用的Apache服务器&#xff…

力扣---LeetCode203. 移除链表元素

文章目录 前言203. 移除链表元素链接方法一&#xff1a;直接删除1.1 注意&#xff1a;1.2 各种情况的流程图&#xff1a;方法二&#xff1a;遍历将非val的节点尾插2.1 流程图&#xff1a;2.2 注意&#xff1a; 总结 前言 你坚持的东西 总有一天会反过来拥抱你 本章的内容是力扣…

智安网络|数据安全问题频发,首推云墙·网站综合防御系统

近期&#xff0c;企业数据安全问题频发&#xff0c;数据安全依旧是企业目前面临的重大风险之一。作为网络安全公司&#xff0c;智安网络以专业的技术团队和丰富的行业经验&#xff0c;为企业和个人提供安全可靠的数据保护服务 案例一&#xff1a; 大学生学习软件超星学习通(下称…

JUC高级十二-ReentrantLock、ReentrantReadWriteLock、StampedLock

无锁→独占锁→读写锁→邮戳锁 1. 关于锁的大厂面试题 你知道Java里面有哪些锁?你说你用过读写锁&#xff0c;锁饥饿问题是什么&#xff1f;有没有比读写锁更快的锁&#xff1f;StampedLock知道吗?(邮戳锁/票据锁)ReentrantReadWriteLock有锁降级机制策略你知道吗&#xff1…

Spring的创建与Bean对象的存取

文章目录&#xff1a;一.Spring项目的创建1.先创建maven项目 2.添加国内源 3.添加spring依赖 4.创建spring配置文件 5.创建启动类 二.Bean对象的创建和读取1.Bean对象的创建与存储方式&#xff08;1&#xff09;类注解 &#xff08;2&#xff09;方法注解 &#xff08;3&#x…

Java中的容器大杂烩-集合

Java中的容器大杂烩-集合 一、 集合引入二、集合框架体系三 、Collection 接口四 、List集合4.1 ArrayList类4.2 LinkedList类4.3 Vector类4.4 ArrayList 、 LinkedList 和 Vector区别 五 、Set集合5.1 HashSet类5.2 TreeSet5.3 LinkedHashSet类 六、List和Set区别七 、Map集合…

制造业巨头遭黑客勒索400万美元,企业如何防范勒索病毒攻击?

4月7日&#xff0c;台湾电脑制造商微星&#xff08;简称MSI&#xff09;发布公开声明&#xff0c;证实其部分网络信息系统遭受了勒索病毒攻击。一个名为“Money Message”的新网络黑客团伙称其从微星的网络系统中窃取了1.5TB的数据&#xff0c;其中包括微星数据库的屏幕截图、源…

YAML /Excel /CSV?自动化测试测试数据管理应用,测试老鸟总结...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 自动化测试无论是…

webhub123 前端技术社区和技术交流学习网站导航

整理了学习前端技术可以参考学习和技术交流的一些网站集合&#xff0c;全部收录到 webhub123 前端技术社区和技术交流学习网站导航http://​www.webhub123.com/#/home/detail?projectHashid30929575&ownerUserid22053727 整理后的效果如下&#xff0c;我们已经按照不同类…

React Props

state 和 props 主要的区别在于 props 是不可变的&#xff0c;而 state 可以根据与用户交互来改变。 所以&#xff0c;有些容器组件需要定义 state 来更新和修改数据。 而子组件只能通过 props 来传递数据。 props 使用 Demo.js &#xff1a; import React from reactfunct…

智能学习 | MATLAB实现ACO-BP多变量时间序列预测(蚁群算法优化BP神经网络)

智能学习 | MATLAB实现ACO-BP多变量时间序列预测(蚁群算法优化BP神经网络) 目录 智能学习 | MATLAB实现ACO-BP多变量时间序列预测(蚁群算法优化BP神经网络)预测效果基本介绍程序设计参考资料预测效果 基本介绍 MATLAB实现ACO-BP多变量时间序列预测(蚁群算法优化BP神经网络…

数据集合注入

集合注入 前面我们已经能完成引入数据类型和简单数据类型的注入&#xff0c;但是还有一种数据类型集合&#xff0c;集合中既可 以装简单数据类型也可以装引用数据类型&#xff0c;对于集合&#xff0c;在Spring中该如何注入呢? 先来回顾下&#xff0c;常见的集合类型有哪些…

Vue电商项目--应用开发详解

vue-cli脚手架初始化项目 首先&#xff0c;页面上新建一个文件夹。然后打开命令端口 vue create app 选择Default ([Vue 2] babel, eslint) 然后把项目拖拽到vscode中。项目目录看一下 脚手架项目的目录 node_modules:放置项目依赖的地方 public:一般放置一些共用的静态资源&a…

数据采集方式有哪些,都有什么特点?

随着中国社会的进一步发展&#xff0c;各行各业都得到了一定程度的进步。进入21世纪以来&#xff0c;大数据、人工智能等行业的飞速发展&#xff0c;极大的带动全社会进步。但是&#xff0c;在一些传统行业内部&#xff0c;还存在这落后的东西&#xff0c;例如数据采集还是沿用…

【机器学习】P24 随机森林算法(1) 实现 “鸢尾花” 预测

随机森林算法 Random Forest Algorithm 随机森林算法随机森林算法实现分类鸢尾花 随机森林算法 随机森林&#xff08;Random Forest&#xff09;算法 是一种 集成学习&#xff08;Ensemble Learning&#xff09;方法&#xff0c;它由多个决策树组成&#xff0c;是一种分类、回…

OS实战笔记(8)-- 设置基本OS基本工作环境

本笔记会搭建OS实战所需的虚拟机环境&#xff0c;主要是创建好虚拟机&#xff0c;设置虚拟机启动硬盘&#xff0c;在启动盘上安装Grub。 由于本专题是个人在业余时间除了Unity学习之外做的&#xff0c;没有时间和精力去解答具体的问题。本笔记中的实验个人在做的过程中除了遇到…

17.集合

集合 集合类是Java数据结构的实现。Java的集合类是java.util包中的重要内容&#xff0c;它允许以各种方式将元素分组&#xff0c;并定义了各种使这些元素更容易操作的方法。Java集合类是Java将一些基本的和使用频率极高的基础类进行封装和增强后再以一个类的形式提供。集合类是…

整理现有的wiki私服项目

文章目录 核心功能现有项目wikijsBookStackmediawikiTiddlyWikigollumdokuwikixwiki 总结参考 核心功能 查找编辑 在线/离线内链【核心】代码高亮图表、表达式生成多媒体&#xff08;图片、音频、视频&#xff09;管理 协作&#xff08;用户管理模式/github模式&#xff09; 修…

JVM 关键点详解

一&#xff0c;JVM 的主要组成部分及其作用 JVM包含两个子系统和两个组件&#xff0c;两个子系统为Class loader(类装载)、Execution engine(执行引擎); 两个组件为Runtime data area(运行时数据区)、Native Interface(本地接口)。 Class loader(类装载): 根据给定的全限定名类…