Kubernetes 核心對象

image.png

Kubernetes 中的所有內(nèi)容都被抽象為“資源”差购,如 Pod、Service耕肩、Node 等都是資源因妇∥侍叮“對象”就是“資源”的實例,是持久化的實體沙峻。Kubernetes 使用這些實體去表示整個集群的狀態(tài)。它們主要描述了如下信息:

  • 哪些容器化應用正在運行(以及在哪些節(jié)點上運行)
  • 可以被應用使用的資源
  • 關(guān)于應用運行時表現(xiàn)的策略两芳,比如重啟策略摔寨、升級策略以及容錯策略

Kubernetes 支持多種不同的方式來創(chuàng)建和管理 Kubernetes 對象,比如:

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

Namespace

Namespace的主要作用是怖辆,將同一集群中的資源劃分為相互隔離的組是复。

  • 同一Namespace內(nèi)的資源名稱要唯一,不同Namespace
    資源名稱沒有這個要求竖螃。
  • Namespace作用域僅針對帶有名字空間的對象淑廊,例如 Deployment、Service 等特咆, 對于不帶Namespace的對象不適用季惩,例如 StorageClass、Node腻格、PersistentVolume 等画拾。
  • 對于所有資源的操作默認會使用default命名空間,這個默認空間可以通過命令指定菜职。

查看哪些資源在名字空間中

查看哪些 Kubernetes 資源在名字空間中青抛,哪些不在名字空間中:

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

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

設置默認操作的命名空間

你可以永久保存名字空間,以用于對應上下文中所有后續(xù) kubectl 命令酬核。

kubectl config set-context --current --namespace=<名字空間名稱>
# 驗證
kubectl config view --minify | grep namespace:

查看名字空間

kubectl get namespace或者kubectl get ns
輸出結(jié)果:

[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 包含這個名字空間蜜另,以便于你無需創(chuàng)建新的名字空間即可開始使用新集群。</dd>
  • kube-node-lease: 該名字空間包含用于與各個節(jié)點關(guān)聯(lián)的 Lease(租約)對象嫡意。 節(jié)點租約允許 kubelet 發(fā)送心跳举瑰, 由此控制面能夠檢測到節(jié)點故障。
  • kube-public: 所有的客戶端(包括未經(jīng)身份驗證的客戶端)都可以讀取該名字空間蔬螟。 該名字空間主要預留為集群使用嘶居,以便某些資源需要在整個集群中可見可讀。 該名字空間的公共屬性只是一種約定而非要求促煮。
  • kube-system: 該名字空間用于 Kubernetes 系統(tǒng)創(chuàng)建的對象邮屁。

查看命名空間詳細信息

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 文件,并寫入下列內(nèi)容:
apiVersion: v1
kind: Namespace
metadata:
  name: <insert-namespace-name-here>

然后運行:

kubectl create -f ./my-namespace.yaml

或者菠齿,你可以使用下面的命令創(chuàng)建名字空間:

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

刪除空間

# 刪除現(xiàn)有命名空間佑吝, 并且會刪除空間下的全部資源
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中可以存在一個或者多個容器,這些容器共享存儲戈钢、網(wǎng)絡痹仙、以及怎樣運行這些容器的聲明。
Pod是不能被外網(wǎng)直接訪問的殉了,所以Pod 通常不是直接創(chuàng)建的开仰,而是使用工作負載資源創(chuàng)建,比如 Deployment薪铜。

命令方式管理Pod

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

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

# 創(chuàng)建Pod
kubectl run pod名稱 --image=鏡像名稱

# 查看Pod詳細信息
kubectl describe pod pod名稱

# 刪除pod
kubectl delete pod pod名稱 [-n 命名空間]  #(默認default)

# 查看pod輸出的日志
kubectl logs -f pod名稱

# 進去pod容器內(nèi)部
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: 容器名稱

執(zhí)行命令:

# 啟動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 的期望狀態(tài)谓娃,實現(xiàn)應用程序的版本控制和滾動更新等功能。

命令方式管理

# 基于Deployment啟動容器
kubectl create deployment deployment名稱 --image=鏡像名稱
# 用deployment啟動的容器會在被刪除后自動再次創(chuàng)建蜒滩,達到故障漂移的效果
# 需要使用deploy的方式刪除deploy
# 查看現(xiàn)在的deployment
kubectl get deployment

# 刪除deployment
kubectl delete deployment deployment名稱

# 基于Deployment啟動容器并設置Pod集群數(shù)
kubectl create deployment deployment名稱 --image=鏡像名稱 --replicas 集群個數(shù)

命令方式管理

新增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                   # 定義副本數(shù)量
  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: 200m            # 請求時申請CPU資源為0.2核
            memory: 256Mi        # 請求時申請內(nèi)存資源為256M
          limits:
            cpu: 500m            # 限定CPU資源上限為0.5核
            memory: 512Mi        # 限定內(nèi)存資源上限為512M
      # 定義tomcat容器
      - name: tomcat
        image: daocloud.io/library/tomcat:8.0.45
        ports:
        - containerPort: 8080
          protocol: TCP
        resources:
          requests:
            cpu: 200m            # 請求時申請CPU資源為0.2核
            memory: 256Mi        # 請求時申請內(nèi)存資源為256M
          limits:
            cpu: 500m            # 限定CPU資源上限為0.5核
            memory: 512Mi        # 限定內(nèi)存資源上限為512M

通過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核,內(nèi)存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 上的網(wǎng)絡應用程序公開為網(wǎng)絡服務的方法,它為一組 Pod 提供單一的入口昧甘,實現(xiàn)負載均衡良拼、服務發(fā)現(xiàn)等功能。

Kubernetes ServiceTypes 允許指定你所需要的 Service 類型充边,Type 的取值以及行為如下:

  • ClusterIP:通過集群的內(nèi)部 IP 暴露服務庸推,選擇該值時服務只能夠在集群內(nèi)部訪問。 這也是你沒有為服務顯式指定 type 時使用的默認值浇冰。 你可以使用 Ingress 或者 Gateway API 向公眾暴露服務贬媒。

  • NodePort:通過每個節(jié)點上的 IP 和靜態(tài)端口(NodePort)暴露服務。 為了讓節(jié)點端口可用肘习,Kubernetes 設置了集群 IP 地址际乘,這等同于你請求 type: ClusterIP 的服務。

  • LoadBalancer:使用云提供商的負載均衡器向外部暴露服務漂佩。 外部負載均衡器可以將流量路由到自動創(chuàng)建的 NodePort 服務和 ClusterIP 服務上脖含。

  • ExternalName:通過返回 CNAME 記錄和對應值罪塔,可以將服務映射到 externalName 字段的內(nèi)容(例如,foo.bar.example.com)养葵。 無需創(chuàng)建任何類型代理征堪。

ClusterIP方式

ClusterIP (虛擬 IP 尋址機制)方式是集群內(nèi)部Pod之間的訪問方式。

image.png
# 通過生成service映射一個Deployment下的所有pod中的某一個端口的容器
kubectl expose deployment Deployment名稱 --port=Service端口號 --target-port=Pod內(nèi)容器端口
[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 >nginx.org</a>.<br/>
Commercial support is available at
<a >nginx.com</a>.</p>

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

也可以通過 Deployment名稱.namespace名稱.svc作為域名訪問关拒。

NodePort方式

ClusterIP的方式只能在Pod內(nèi)部實現(xiàn)訪問佃蚜,但是一般需要對外暴露網(wǎng)關(guān),所以需要NodePort的方式Pod外暴露訪問

# 通過生成service映射一個Deployment下的所有pod中的某一個端口的容器
kubectl expose deployment Deployment名稱 --port=Service端口號 --target-port=Pod內(nèi)容器端口 --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是內(nèi)部容器通信使用的涌韩。

使用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                   # 定義副本數(shù)量
  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: 200m            # 請求時申請CPU資源為0.2核
            memory: 256Mi        # 請求時申請內(nèi)存資源為256M
          limits:
            cpu: 500m            # 限定CPU資源上限為0.5核
            memory: 512Mi        # 限定內(nèi)存資源上限為512M
      # 定義tomcat容器
      - name: tomcat
        image: daocloud.io/library/tomcat:8.0.45
        ports:
        - containerPort: 8080
          protocol: TCP
        resources:
          requests:
            cpu: 200m            # 請求時申請CPU資源為0.2核
            memory: 256Mi        # 請求時申請內(nèi)存資源為256M
          limits:
            cpu: 500m            # 限定CPU資源上限為0.5核
            memory: 512Mi        # 限定內(nèi)存資源上限為512M
---
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(網(wǎng)關(guān))

暴露 Service 給外部網(wǎng)絡,實現(xiàn)應用程序的訪問控制臣樱、路由等功能靶擦,Ingress底層其實就是一個Nginx。

下面是一個將所有流量都發(fā)送到同一 Service 的簡單 Ingress 示例:

image.png

Ingress 可為 Service 提供外部可訪問的 URL雇毫、負載均衡流量玄捕、終止 SSL/TLS,以及基于名稱的虛擬托管棚放。 Ingress 控制器 通常負責通過負載均衡器來實現(xiàn) Ingress枚粘,盡管它也可以配置邊緣路由器或其他前端來幫助處理流量。

Ingress 不會公開任意端口或協(xié)議飘蚯。 將 HTTP 和 HTTPS 以外的服務公開到 Internet 時馍迄,通常使用 Service.Type=NodePortService.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                   # 定義副本數(shù)量
  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: 200m            # 請求時申請CPU資源為0.2核
            memory: 256Mi        # 請求時申請內(nèi)存資源為256M
          limits:
            cpu: 500m            # 限定CPU資源上限為0.5核
            memory: 512Mi        # 限定內(nèi)存資源上限為512M
---
apiVersion: apps/v1
kind: Deployment
metadata:                        # metadata字段包含對Deployment的描述信息
  name: tomcate-deployment
  namespace: test
  labels:
    app: tomcate-pod      # 標簽字段用于識別Pod
spec:
  replicas: 2                   # 定義副本數(shù)量
  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: 200m            # 請求時申請CPU資源為0.2核
            memory: 256Mi        # 請求時申請內(nèi)存資源為256M
          limits:
            cpu: 500m            # 限定CPU資源上限為0.5核
            memory: 512Mi        # 限定內(nèi)存資源上限為512M
---
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

用于管理配置和敏感信息,例如數(shù)據(jù)庫連接字符串峦甩、API 密鑰等赘来。

ReplicaSet(副本集)

控制 Pod 的數(shù)量,實現(xiàn)自動伸縮和容錯等功能凯傲。

StatefulSet(有狀態(tài)集合)

管理有狀態(tài)的應用程序犬辰,例如數(shù)據(jù)庫、消息隊列等冰单。

DaemonSet(守護集合)

確保每個節(jié)點上都運行著一個 Pod忧风,用于實現(xiàn)集群級別的服務。

Job 和 CronJob

用于管理批處理任務球凰,例如數(shù)據(jù)備份狮腿、清理等腿宰。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市缘厢,隨后出現(xiàn)的幾起案子吃度,更是在濱河造成了極大的恐慌,老刑警劉巖贴硫,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件椿每,死亡現(xiàn)場離奇詭異,居然都是意外死亡英遭,警方通過查閱死者的電腦和手機间护,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來挖诸,“玉大人汁尺,你說我怎么就攤上這事《嗦桑” “怎么了痴突?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長狼荞。 經(jīng)常有香客問我辽装,道長,這世上最難降的妖魔是什么相味? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任拾积,我火速辦了婚禮,結(jié)果婚禮上丰涉,老公的妹妹穿的比我還像新娘拓巧。我一直安慰自己,他們只是感情好昔搂,可當我...
    茶點故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布玲销。 她就那樣靜靜地躺著,像睡著了一般摘符。 火紅的嫁衣襯著肌膚如雪贤斜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天逛裤,我揣著相機與錄音瘩绒,去河邊找鬼。 笑死带族,一個胖子當著我的面吹牛锁荔,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蝙砌,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼阳堕,長吁一口氣:“原來是場噩夢啊……” “哼跋理!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起恬总,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤前普,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后壹堰,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拭卿,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年贱纠,在試婚紗的時候發(fā)現(xiàn)自己被綠了峻厚。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡谆焊,死狀恐怖惠桃,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情懊渡,我是刑警寧澤刽射,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布军拟,位于F島的核電站剃执,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏懈息。R本人自食惡果不足惜肾档,卻給世界環(huán)境...
    茶點故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望辫继。 院中可真熱鬧怒见,春花似錦、人聲如沸姑宽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽炮车。三九已至舵变,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瘦穆,已是汗流浹背纪隙。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留扛或,地道東北人绵咱。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像熙兔,于是被迫代替她去往敵國和親悲伶。 傳聞我的和親對象是個殘疾皇子艾恼,可洞房花燭夜當晚...
    茶點故事閱讀 44,573評論 2 353

推薦閱讀更多精彩內(nèi)容