?史上最全的企業級容器系列之kubernetes入門和搭建(三)

六脈神劍發表於2020-03-02

前言

文字已收錄至我的GitHub倉庫,歡迎Star:github.com/bin39232820…
種一棵樹最好的時間是十年前,其次是現在
我知道很多人不玩qq了,但是懷舊一下,歡迎加入六脈神劍Java菜鳥學習群,群聊號碼:549684836 鼓勵大家在技術的路上寫部落格

絮叨

昨天把叢集搭建成功了,我們今天繼續幹。

通過資源配置執行容器

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

建立 YAML 配置檔案

以部署 Nginx 為例

部署 Deployment

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

注意: extensions/v1beta1 不再支援部署 Deployment,並且修改了少量命令

# 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
複製程式碼

v1.16.0 之後

# API 版本號:由 extensions/v1beta1 修改為 apps/v1
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-app
spec:
  # 增加了選擇器配置
  selector:
    matchLabels:
      app: nginx
  replicas: 2
  template:
    metadata:
      labels:
        # 設定標籤由 name 修改為 app
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
複製程式碼
# 部署
kubectl create -f nginx-deployment.yml

# 刪除
kubectl delete -f nginx-deployment.yml
複製程式碼

釋出 Service 建立一個名為 nginx-service.yml 的配置檔案 v1.16.0 之前

# 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
複製程式碼

v1.16.0 之後

apiVersion: v1
kind: Service
metadata:
  name: nginx-http
spec:
  ports:
    - port: 80
      targetPort: 80
  type: LoadBalancer
  selector:
    # 標籤選擇器由 name 修改為 app
    app: nginx
複製程式碼
# 部署
kubectl create -f nginx-service.yml

# 刪除
kubectl delete -f nginx-service.yml
複製程式碼

驗證是否生效

檢視 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
複製程式碼

檢視 Deployment 列表

kubectl get deployment

# 輸出如下
NAME        READY   UP-TO-DATE   AVAILABLE   AGE
nginx-app   2/2     2            2           25m
複製程式碼

檢視 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
複製程式碼

檢視 Service 詳情

kubectl describe service nginx-http 

# 輸出如下
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>
複製程式碼

通過瀏覽器訪問 http://192.168.62.128:31556/

?史上最全的企業級容器系列之kubernetes入門和搭建(三)

整合環境部署

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

v1.16.0 之前

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
複製程式碼

v1.16.0 之後

# API 版本號:由 extensions/v1beta1 修改為 apps/v1
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-app
spec:
  # 增加了選擇器配置
  selector:
    matchLabels:
      app: nginx
  replicas: 2
  template:
    metadata:
      labels:
        # 設定標籤由 name 修改為 app
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-http
spec:
  ports:
    - port: 80
      targetPort: 80
  type: LoadBalancer
  selector:
    # 標籤選擇器由 name 修改為 app
    app: nginx
複製程式碼
# 部署
kubectl create -f nginx.yml

# 刪除
kubectl delete -f nginx.yml
複製程式碼

結尾

今天就是把.yml的部署釋出方式實現了一遍。

日常求贊

好了各位,以上就是這篇文章的全部內容了,能看到這裡的人呀,都是真粉

創作不易,各位的支援和認可,就是我創作的最大動力,我們下篇文章見

六脈神劍 | 文 【原創】如果本篇部落格有任何錯誤,請批評指教,不勝感激 !

相關文章