<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Kubernetes 集群中部署 nginx 服務

      kubernetes 部署nginx服務

      本章節將介紹如何在kubernetes集群中部署一個nginx服務,并且能夠對其進行訪問。

      Namespace

      Namespace是kubernetes系統中的一種非常重要資源,它的主要作用是用來實現多套環境的資源隔離或者多租戶的資源隔離。

      默認情況下,kubernetes集群中的所有的Pod都是可以相互訪問的。但是在實際中,可能不想讓兩個Pod之間進行互相的訪問,那此時就可以將兩個Pod劃分到不同的namespace下。kubernetes通過將集群內部的資源分配到不同的Namespace中,可以形成邏輯上的"組",以方便不同的組的資源進行隔離使用和管理。

      可以通過kubernetes的授權機制,將不同的namespace交給不同租戶進行管理,這樣就實現了多租戶的資源隔離。此時還能結合kubernetes的資源配額機制,限定不同租戶能占用的資源,例如CPU使用量、內存使用量等等,來實現租戶可用資源的管理。

      kubernetes在集群啟動之后,會默認創建幾個namespace

      [root@master ~]# kubectl  get namespace
      NAME              STATUS   AGE
      default           Active   45h     #  所有未指定Namespace的對象都會被分配在default命名空間
      kube-node-lease   Active   45h     #  集群節點之間的心跳維護,v1.13開始引入
      kube-public       Active   45h     #  此命名空間下的資源可以被所有人訪問(包括未認證用戶)
      kube-system       Active   45h     #  所有由Kubernetes系統創建的資源都處于這個命名空間
      

      下面來看namespace資源的具體操作:

      查看

      # 1 查看所有的ns  命令:kubectl get ns
      [root@master ~]# kubectl get ns
      NAME              STATUS   AGE
      default           Active   45h
      kube-node-lease   Active   45h
      kube-public       Active   45h     
      kube-system       Active   45h     
      
      # 2 查看指定的ns   命令:kubectl get ns ns名稱
      [root@master ~]# kubectl get ns default
      NAME      STATUS   AGE
      default   Active   45h
      
      # 3 指定輸出格式  命令:kubectl get ns ns名稱  -o 格式參數
      # kubernetes支持的格式有很多,比較常見的是wide、json、yaml
      [root@master ~]# kubectl get ns default -o yaml
      apiVersion: v1
      kind: Namespace
      metadata:
        creationTimestamp: "2024-05-08T04:44:16Z"
        name: default
        resourceVersion: "151"
        selfLink: /api/v1/namespaces/default
        uid: 7405f73a-e486-43d4-9db6-145f1409f090
      spec:
        finalizers:
        - kubernetes
      status:
        phase: Active
        
      # 4 查看ns詳情  命令:kubectl describe ns ns名稱
      [root@master ~]# kubectl describe ns default
      Name:         default
      Labels:       <none>
      Annotations:  <none>
      Status:       Active  # Active 命名空間正在使用中  Terminating 正在刪除命名空間
      
      # ResourceQuota 針對namespace做的資源限制
      # LimitRange針對namespace中的每個組件做的資源限制
      No resource quota.
      No LimitRange resource.
      

      創建

      # 創建namespace
      [root@master ~]# kubectl create ns dev
      namespace/dev created
      

      刪除

      # 刪除namespace
      [root@master ~]# kubectl delete ns dev
      namespace "dev" deleted
      

      配置方式

      首先準備一個yaml文件:ns-dev.yaml

      apiVersion: v1
      kind: Namespace
      metadata:
        name: dev
      

      然后就可以執行對應的創建和刪除命令了:

      創建:kubectl create -f ns-dev.yaml

      刪除:kubectl delete -f ns-dev.yaml

      Pod

      Pod是kubernetes集群進行管理的最小單元,程序要運行必須部署在容器中,而容器必須存在于Pod中。

      Pod可以認為是容器的封裝,一個Pod中可以存在一個或者多個容器。

      kubernetes在集群啟動之后,集群中的各個組件也都是以Pod方式運行的??梢酝ㄟ^下面命令查看:

      [root@master ~]# kubectl get pod -n kube-system
      NAMESPACE     NAME                             READY   STATUS    RESTARTS   AGE
      kube-system   coredns-6955765f44-68g6v         1/1     Running   0          2d1h
      kube-system   coredns-6955765f44-cs5r8         1/1     Running   0          2d1h
      kube-system   etcd-master                      1/1     Running   0          2d1h
      kube-system   kube-apiserver-master            1/1     Running   0          2d1h
      kube-system   kube-controller-manager-master   1/1     Running   0          2d1h
      kube-system   kube-flannel-ds-amd64-47r25      1/1     Running   0          2d1h
      kube-system   kube-flannel-ds-amd64-ls5lh      1/1     Running   0          2d1h
      kube-system   kube-proxy-685tk                 1/1     Running   0          2d1h
      kube-system   kube-proxy-87spt                 1/1     Running   0          2d1h
      kube-system   kube-scheduler-master            1/1     Running   0          2d1h
      

      創建并運行

      kubernetes沒有提供單獨運行Pod的命令,都是通過Pod控制器來實現的

      # 命令格式: kubectl run (pod控制器名稱) [參數] 
      # --image  指定Pod的鏡像
      # --port   指定端口
      # --namespace  指定namespace
      [root@master ~]# kubectl run nginx --image=nginx:latest --port=80 --namespace dev 
      deployment.apps/nginx created
      

      查看pod信息

      # 查看Pod基本信息
      [root@master ~]# kubectl get pods -n dev
      NAME    READY   STATUS    RESTARTS   AGE
      nginx   1/1     Running   0          43s
      
      # 查看Pod的詳細信息
      [root@master ~]# kubectl describe pod nginx -n dev
      Name:         nginx
      Namespace:    dev
      Priority:     0
      Node:         node1/172.16.5.4
      Start Time:   Wed, 08 May 2024 09:29:24 +0800
      Labels:       pod-template-hash=5ff7956ff6
                    run=nginx
      Annotations:  <none>
      Status:       Running
      IP:           10.244.1.23
      IPs:
        IP:           10.244.1.23
      Controlled By:  ReplicaSet/nginx
      Containers:
        nginx:
          Container ID:   docker://4c62b8c0648d2512380f4ffa5da2c99d16e05634979973449c98e9b829f6253c
          Image:          nginx:latest
          Image ID:       docker-pullable://nginx@sha256:485b610fefec7ff6c463ced9623314a04ed67e3945b9c08d7e53a47f6d108dc7
          Port:           80/TCP
          Host Port:      0/TCP
          State:          Running
            Started:      Wed, 08 May 2024 09:30:01 +0800
          Ready:          True
          Restart Count:  0
          Environment:    <none>
          Mounts:
            /var/run/secrets/kubernetes.io/serviceaccount from default-token-hwvvw (ro)
      Conditions:
        Type              Status
        Initialized       True
        Ready             True
        ContainersReady   True
        PodScheduled      True
      Volumes:
        default-token-hwvvw:
          Type:        Secret (a volume populated by a Secret)
          SecretName:  default-token-hwvvw
          Optional:    false
      QoS Class:       BestEffort
      Node-Selectors:  <none>
      Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                       node.kubernetes.io/unreachable:NoExecute for 300s
      Events:
        Type    Reason     Age        From               Message
        ----    ------     ----       ----               -------
        Normal  Scheduled  <unknown>  default-scheduler  Successfully assigned dev/nginx-5ff7956ff6-fg2db to node1
        Normal  Pulling    4m11s      kubelet, node1     Pulling image "nginx:latest"
        Normal  Pulled     3m36s      kubelet, node1     Successfully pulled image "nginx:latest"
        Normal  Created    3m36s      kubelet, node1     Created container nginx
        Normal  Started    3m36s      kubelet, node1     Started container nginx
      

      訪問Pod

      # 獲取podIP
      [root@master ~]# kubectl get pods -n dev -o wide
      NAME    READY   STATUS    RESTARTS   AGE    IP             NODE    ... 
      nginx   1/1     Running   0          190s   10.244.1.23   node1   ...
      
      #訪問POD
      [root@master ~]# curl http://10.244.1.23:80
      <!DOCTYPE html>
      <html>
      <head>
      	<title>Welcome to nginx!</title>
      </head>
      <body>
      	<p><em>Thank you for using nginx.</em></p>
      </body>
      </html>
      

      刪除指定Pod

      # 刪除指定Pod
      [root@master ~]# kubectl delete pod nginx -n dev
      pod "nginx" deleted
      
      # 此時,顯示刪除Pod成功,但是再查詢,發現又新產生了一個 
      [root@master ~]# kubectl get pods -n dev
      NAME    READY   STATUS    RESTARTS   AGE
      nginx   1/1     Running   0          21s
      
      # 這是因為當前Pod是由Pod控制器創建的,控制器會監控Pod狀況,一旦發現Pod死亡,會立即重建
      # 此時要想刪除Pod,必須刪除Pod控制器
      
      # 先來查詢一下當前namespace下的Pod控制器
      [root@master ~]# kubectl get deploy -n  dev
      NAME    READY   UP-TO-DATE   AVAILABLE   AGE
      nginx   1/1     1            1           9m7s
      
      # 接下來,刪除此PodPod控制器
      [root@master ~]# kubectl delete deploy nginx -n dev
      deployment.apps "nginx" deleted
      
      # 稍等片刻,再查詢Pod,發現Pod被刪除了
      [root@master ~]# kubectl get pods -n dev
      No resources found in dev namespace.
      

      配置操作

      創建一個pod-nginx.yaml,內容如下:

      apiVersion: v1
      kind: Pod
      metadata:
        name: nginx
        namespace: dev
      spec:
        containers:
        - image: nginx:latest
          name: pod
          ports:
          - name: nginx-port
            containerPort: 80
            protocol: TCP
      

      然后就可以執行對應的創建和刪除命令了:

      創建:kubectl create -f pod-nginx.yaml

      刪除:kubectl delete -f pod-nginx.yaml

      Label

      Label是kubernetes系統中的一個重要概念。它的作用就是在資源上添加標識,用來對它們進行區分和選擇。

      Label的特點:

      • 一個Label會以key/value鍵值對的形式附加到各種對象上,如Node、Pod、Service等等
      • 一個資源對象可以定義任意數量的Label ,同一個Label也可以被添加到任意數量的資源對象上去
      • Label通常在資源對象定義時確定,當然也可以在對象創建后動態添加或者刪除

      可以通過Label實現資源的多維度分組,以便靈活、方便地進行資源分配、調度、配置、部署等管理工作。

      一些常用的Label 示例如下:

      • 版本標簽:"version":"release", "version":"stable"......
      • 環境標簽:"environment":"dev","environment":"test","environment":"pro"
      • 架構標簽:"tier":"frontend","tier":"backend"

      標簽定義完畢之后,還要考慮到標簽的選擇,這就要使用到Label Selector,即:

      Label用于給某個資源對象定義標識

      Label Selector用于查詢和篩選擁有某些標簽的資源對象

      當前有兩種Label Selector:

      • 基于等式的Label Selector

        name = slave: 選擇所有包含Label中key="name"且value="slave"的對象

        env != production: 選擇所有包括Label中的key="env"且value不等于"production"的對象

      • 基于集合的Label Selector

        name in (master, slave): 選擇所有包含Label中的key="name"且value="master"或"slave"的對象

        name not in (frontend): 選擇所有包含Label中的key="name"且value不等于"frontend"的對象

      標簽的選擇條件可以使用多個,此時將多個Label Selector進行組合,使用逗號","進行分隔即可。例如:

      name=slave,env!=production

      name not in (frontend),env!=production

      命令方式

      # 為pod資源打標簽
      [root@master ~]# kubectl label pod nginx-pod version=1.0 -n dev
      pod/nginx-pod labeled
      
      # 為pod資源更新標簽
      [root@master ~]# kubectl label pod nginx-pod version=2.0 -n dev --overwrite
      pod/nginx-pod labeled
      
      # 查看標簽
      [root@master ~]# kubectl get pod nginx-pod  -n dev --show-labels
      NAME        READY   STATUS    RESTARTS   AGE   LABELS
      nginx-pod   1/1     Running   0          10m   version=2.0
      
      # 篩選標簽
      [root@master ~]# kubectl get pod -n dev -l version=2.0  --show-labels
      NAME        READY   STATUS    RESTARTS   AGE   LABELS
      nginx-pod   1/1     Running   0          17m   version=2.0
      [root@master ~]# kubectl get pod -n dev -l version!=2.0 --show-labels
      No resources found in dev namespace.
      
      #刪除標簽
      [root@master ~]# kubectl label pod nginx-pod version- -n dev
      pod/nginx-pod labeled
      

      配置方式

      apiVersion: v1
      kind: Pod
      metadata:
        name: nginx
        namespace: dev
        labels:
          version: "3.0" 
          env: "test"
      spec:
        containers:
        - image: nginx:latest
          name: pod
          ports:
          - name: nginx-port
            containerPort: 80
            protocol: TCP
      

      然后就可以執行對應的更新命令了:kubectl apply -f pod-nginx.yaml

      Deployment

      在kubernetes中,Pod是最小的控制單元,但是kubernetes很少直接控制Pod,一般都是通過Pod控制器來完成的。Pod控制器用于pod的管理,確保pod資源符合預期的狀態,當pod的資源出現故障時,會嘗試進行重啟或重建pod。

      在kubernetes中Pod控制器的種類有很多,本章節只介紹一種:Deployment。

      命令操作

      # 命令格式: kubectl create deployment 名稱  [參數] 
      # --image  指定pod的鏡像
      # --port   指定端口
      # --replicas  指定創建pod數量
      # --namespace  指定namespace
      [root@master ~]# kubectl create deploy nginx --image=nginx:latest --port=80 --replicas=3 -n dev
      deployment.apps/nginx created
      
      # 查看創建的Pod
      [root@master ~]# kubectl get pods -n dev
      NAME                     READY   STATUS    RESTARTS   AGE
      nginx-5ff7956ff6-6k8cb   1/1     Running   0          19s
      nginx-5ff7956ff6-jxfjt   1/1     Running   0          19s
      nginx-5ff7956ff6-v6jqw   1/1     Running   0          19s
      
      # 查看deployment的信息
      [root@master ~]# kubectl get deploy -n dev
      NAME    READY   UP-TO-DATE   AVAILABLE   AGE
      nginx   3/3     3            3           2m42s
      
      # UP-TO-DATE:成功升級的副本數量
      # AVAILABLE:可用副本的數量
      [root@master ~]# kubectl get deploy -n dev -o wide
      NAME    READY UP-TO-DATE  AVAILABLE   AGE     CONTAINERS   IMAGES              SELECTOR
      nginx   3/3     3         3           2m51s   nginx        nginx:latest        run=nginx
      
      # 查看deployment的詳細信息
      [root@master ~]# kubectl describe deploy nginx -n dev
      Name:                   nginx
      Namespace:              dev
      CreationTimestamp:      Wed, 08 May 2024 11:14:14 +0800
      Labels:                 run=nginx
      Annotations:            deployment.kubernetes.io/revision: 1
      Selector:               run=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:  run=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-5ff7956ff6 (3/3 replicas created)
      Events:
        Type    Reason             Age    From                   Message
        ----    ------             ----   ----                   -------
        Normal  ScalingReplicaSet  5m43s  deployment-controller  Scaled up replicaset nginx-5ff7956ff6 to 3
        
      # 刪除 
      [root@master ~]# kubectl delete deploy nginx -n dev
      deployment.apps "nginx" deleted
      

      配置操作

      創建一個deploy-nginx.yaml,內容如下:

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: nginx
        namespace: dev
      spec:
        replicas: 3
        selector:
          matchLabels:
            run: nginx
        template:
          metadata:
            labels:
              run: nginx
          spec:
            containers:
            - image: nginx:latest
              name: nginx
              ports:
              - containerPort: 80
                protocol: TCP
      

      然后就可以執行對應的創建和刪除命令了:

      創建:kubectl create -f deploy-nginx.yaml

      刪除:kubectl delete -f deploy-nginx.yaml

      Service

      通過上節課的學習,已經能夠利用Deployment來創建一組Pod來提供具有高可用性的服務。

      雖然每個Pod都會分配一個單獨的Pod IP,然而卻存在如下兩問題:

      • Pod IP 會隨著Pod的重建產生變化
      • Pod IP 僅僅是集群內可見的虛擬IP,外部無法訪問

      這樣對于訪問這個服務帶來了難度。因此,kubernetes設計了Service來解決這個問題。

      Service可以看作是一組同類Pod對外的訪問接口。借助Service,應用可以方便地實現服務發現和負載均衡。

      操作一:創建集群內部可訪問的Service

      # 暴露Service
      [root@master ~]# kubectl expose deploy nginx --name=svc-nginx1 --type=ClusterIP --port=80 --target-port=80 -n dev
      service/svc-nginx1 exposed
      
      # 查看service
      [root@master ~]# kubectl get svc svc-nginx1 -n dev -o wide
      NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE     SELECTOR
      svc-nginx1   ClusterIP   10.109.179.231   <none>        80/TCP    3m51s   run=nginx
      
      # 這里產生了一個CLUSTER-IP,這就是service的IP,在Service的生命周期中,這個地址是不會變動的
      # 可以通過這個IP訪問當前service對應的POD
      [root@master ~]# curl 10.109.179.231:80
      <!DOCTYPE html>
      <html>
      <head>
      <title>Welcome to nginx!</title>
      </head>
      <body>
      <h1>Welcome to nginx!</h1>
      .......
      </body>
      </html>
      

      操作二:創建集群外部也可訪問的Service

      # 上面創建的Service的type類型為ClusterIP,這個ip地址只用集群內部可訪問
      # 如果需要創建外部也可以訪問的Service,需要修改type為NodePort
      [root@master ~]# kubectl expose deploy nginx --name=svc-nginx2 --type=NodePort --port=80 --target-port=80 -n dev
      service/svc-nginx2 exposed
      
      # 此時查看,會發現出現了NodePort類型的Service,而且有一對Port(80:31928/TC)
      [root@master ~]# kubectl get svc  svc-nginx2  -n dev -o wide
      NAME          TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE    SELECTOR
      svc-nginx2    NodePort    10.100.94.0      <none>        80:31928/TCP   9s     run=nginx
      
      # 接下來就可以通過集群外的主機訪問 節點IP:31928訪問服務了
      # 例如在的電腦主機上通過瀏覽器訪問下面的地址
      http://172.16.5.4:31928/
      

      刪除Service

      [root@master ~]# kubectl delete svc svc-nginx-1 -n dev service "svc-nginx-1" deleted
      

      配置方式

      創建一個svc-nginx.yaml,內容如下:

      apiVersion: v1
      kind: Service
      metadata:
        name: svc-nginx
        namespace: dev
      spec:
        clusterIP: 10.109.179.231 #固定svc的內網ip
        ports:
        - port: 80
          protocol: TCP
          targetPort: 80
        selector:
          run: nginx
        type: ClusterIP
      

      然后就可以執行對應的創建和刪除命令了:

      創建:kubectl create -f svc-nginx.yaml

      刪除:kubectl delete -f svc-nginx.yaml

      至此,已經掌握了Namespace、Pod、Deployment、Service資源的基本操作,有了這些操作,就可以在kubernetes集群中實現一個服務的簡單部署和訪問了,但是如果想要更好的使用kubernetes,就需要深入學習這幾種資源的細節和原理。

      posted @ 2025-02-18 09:21  講文張字  閱讀(711)  評論(0)    收藏  舉報
      返回頂部
      主站蜘蛛池模板: 亚洲欧美综合人成在线| 国产精品香蕉在线观看不卡| 爆乳2把你榨干哦ova在线观看| 98精品全国免费观看视频| 绝顶丰满少妇av无码| 亚洲综合中文字幕首页| 人妻激情偷乱一区二区三区| 农民人伦一区二区三区| 午夜久久水蜜桃一区二区| 日日摸夜夜添夜夜添国产三级| 亚洲日韩性欧美中文字幕| 人妻精品久久无码区| 亚洲性夜夜天天天| 99久久99久久久精品久久 | 办公室强奷漂亮少妇视频| 免费人成视频网站在线观看18| 久久夜色精品亚洲国产av| 综合激情网一区二区三区| 久久96热人妻偷产精品| 精品国产乱码久久久久夜深人妻| 乡宁县| 人人妻人人妻人人片色av| 午夜国产精品福利一二| 香港经典a毛片免费观看播放| 国产精品国产高清国产av| 麻豆亚洲自偷拍精品日韩另 | 和顺县| 亚洲免费一区二区av| 国产激情艳情在线看视频| 青青草无码免费一二三区| 国产在线无码精品无码| 国产精品综合在线免费看| 国产成人精品aa毛片| 青青草国产精品日韩欧美| 18禁精品一区二区三区| 性XXXX视频播放免费直播| 久久99九九精品久久久久蜜桃| 亚洲成女人图区一区二区| 樱花草视频www日本韩国| 日韩人妻无码一区二区三区99| 国产精品色三级在线观看|