1. 程式人生 > 實用技巧 >k8s通過資源配置執行容器

k8s通過資源配置執行容器

1、概述

我們知道通過run命令啟動容器非常麻煩,Docker 提供了 Compose 為我們解決了這個問題。那 Kubernetes 是如何解決這個問題的呢?其實很簡單,使用kubectl create命令就可以做到和 Compose 一樣的效果了,該命令可以通過配置檔案快速建立一個叢集資源物件。

2、建立 YAML 配置檔案

以部署 Nginx 為例

a.部署 Deployment

建立一個名為nginx-deployment.yml的配置檔案

    # API 版本號
    apiVersion: extensions/v1beta1
    # 型別,如:Pod/ReplicationController/Deployment/Service/Ingress
    kind: Deployment
    # 元資料
    metadata:
      # Kind 的名稱
      name: nginx-app
    spec:
      # 部署的例項數量
      replicas: 2
      template:
        metadata:
          labels:
            # 容器標籤的名字,釋出 Service 時,selector 需要和這裡對應
            name: nginx
        spec:
          # 配置容器,陣列型別,說明可以配置多個容器
          containers:
          # 容器名稱
          - name: nginx
            # 容器映象
            image: nginx
            # 暴露埠
            ports:
            # Pod 埠
            - containerPort: 80
    # 部署
    kubectl create -f nginx-deployment.yml
    
    # 刪除
    kubectl delete -f nginx-deployment.yml

b.釋出 Service

建立一個名為nginx-service.yml的配置檔案

    # API 版本號
    apiVersion: v1
    # 型別,如:Pod/ReplicationController/Deployment/Service/Ingress
    kind: Service
    # 元資料
    metadata:
      # Kind 的名稱
      name: nginx-http
    spec:
      # 暴露埠
      ports:
        ## Service 暴露的埠
        - port: 80
          ## Pod 上的埠,這裡是將 Service 暴露的埠轉發到 Pod 埠上
          targetPort: 80
      # 型別
      type: LoadBalancer
      # 標籤選擇器
      selector:
        # 需要和上面部署的 Deployment 標籤名對應
        name: nginx
    # 部署
    kubectl create -f nginx-service.yml
    
    # 刪除
    kubectl delete -f nginx-service.yml

3、驗證是否生效

a.檢視 Pod 列表

    kubectl get pods
    
    # 輸出如下
    NAME                         READY   STATUS    RESTARTS   AGE
    nginx-app-64bb598779-2pplx   1/1     Running   0          25m
    nginx-app-64bb598779-824lc   1/1     Running   0          25m

b.檢視 Deployment 列表

    kubectl get deployment
    
    # 輸出如下
    NAME        READY   UP-TO-DATE   AVAILABLE   AGE
    nginx-app   2/2     2            2           25m

c.檢視 Service 列表

    kubectl get service
    
    # 輸出如下
    NAME         TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
    kubernetes   ClusterIP      10.96.0.1      <none>        443/TCP        20h
    nginx-http    LoadBalancer   10.98.49.142   <pending>     80:31631/TCP   14m

d.檢視 Service 詳情

    kubectl describe service nginx-app
    
    # 輸出如下
    Name:                     nginx-http
    Namespace:                default
    Labels:                   <none>
    Annotations:              <none>
    Selector:                 name=nginx
    Type:                     LoadBalancer
    IP:                       10.98.49.142
    Port:                     <unset>  80/TCP
    TargetPort:               80/TCP
    NodePort:                 <unset>  31631/TCP
    Endpoints:                10.244.141.205:80,10.244.2.4:80
    Session Affinity:         None
    External Traffic Policy:  Cluster
    Events:                   <none>

e.通過瀏覽器訪問

通過瀏覽器訪問 http://192.168.141.150:31631/ ,出現 Nginx 歡迎頁即表示成功

4/整合環境部署

也可以不區分配置檔案,一次性部署 Deployment 和 Service,建立一個名為nginx.yml的配置檔案,配置內容如下:

    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: nginx-app
    spec:
      replicas: 2
      template:
        metadata:
          labels:
            name: nginx
        spec:
          containers:
          - name: nginx
            image: nginx
            ports:
            - containerPort: 80
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-http
    spec:
      ports:
        - port: 80
          targetPort: 80
          # 可以指定 NodePort 埠,預設範圍是:30000-32767
          # nodePort: 30080
      type: LoadBalancer
      selector:
        name: nginx
    # 部署
    kubectl create -f nginx.yml
    
    # 刪除
    kubectl delete -f nginx.yml

5、附:修改預設的埠範圍

Kubernetes 服務的 NodePort 預設埠範圍是 30000-32767,在某些場合下,這個限制不太適用,我們可以自定義它的埠範圍,操作步驟如下:

編輯vi /etc/kubernetes/manifests/kube-apiserver.yaml配置檔案,增加配置--service-node-port-range=2-65535

    apiVersion: v1
    kind: Pod
    metadata:
      creationTimestamp: null
      labels:
        component: kube-apiserver
        tier: control-plane
      name: kube-apiserver
      namespace: kube-system
    spec:
      containers:
      - command:
        - kube-apiserver
        # 在這裡增加配置即可
        - --service-node-port-range=2-65535
        - --advertise-address=192.168.141.150
        - --allow-privileged=true
        - --authorization-mode=Node,RBAC
        - --client-ca-file=/etc/kubernetes/pki/ca.crt
        - --enable-admission-plugins=NodeRestriction
        - --enable-bootstrap-token-auth=true
        - --etcd-cafile=/etc/kubernetes/pki/etcd/ca.crt
        - --etcd-certfile=/etc/kubernetes/pki/apiserver-etcd-client.crt
    // 以下配置省略...

使用docker ps命令找到kube-apiserver容器,再使用docker restart <ApiServer 容器 ID>即可生效。

轉自:有夢想的鹹魚