簡化 Kubernetes Yaml 檔案建立

暖夏未眠丶發表於2018-01-10

如果需要自動化處理複雜的Kubernetes任務,常常需要編寫Yaml配置檔案。由於Yaml檔案格式比較複雜,即使是老手有時也不免會犯錯或需要查詢文件,也有人開玩笑這是使用 Yaml 程式設計。我們今天將介紹幾個方法來幫助大家來簡化 Kubernetes Yaml 檔案建立。

image
Kubernetes 提供了豐富的 kubectl 命令,可以較為方便地處理常見任務。如果需要自動化處理複雜的Kubernetes任務,常常需要編寫Yaml配置檔案。由於Yaml檔案格式比較複雜,即使是老手有時也不免會犯錯或需要查詢文件,也有人開玩笑這是使用 Yaml 程式設計。我們今天將介紹幾個方法來幫助大家來簡化 Kubernetes Yaml 檔案建立。

模擬命令執行

kubectl中很多命令支援 --dry-run-o yaml 引數,可以方便地模擬命令執行,並輸出yaml格式的命令請求,這樣我們就可以將執行結果 Copy & Paste到自己的編輯器中,修改完成自己的配置檔案。

$ kubectl run myapp --image=nginx --dry-run -o yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    run: myapp
  name: myapp
spec:
  replicas: 1
  selector:
    matchLabels:
      run: myapp
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        run: myapp
    spec:
      containers:
      - image: nginx
        name: myapp
        resources: {}
status: {}複製程式碼
$ kubectl create secret generic mysecret --from-literal=quiet-phrase="Shh! Dont' tell" -o yaml --dry-run
apiVersion: v1
data:
  quiet-phrase: U2hoISBEb250JyB0ZWxs
kind: Secret
metadata:
  creationTimestamp: null
  name: mysecret複製程式碼

匯出資源描述

kubectl get <resource-type> <resource> --export -o yaml 命令會以Yaml格式匯出系統中已有資源描述

比如,我們可以將系統中 mysql 部署的描述導成 Yaml 檔案

$ kubectl get deployment mysql --export -o yaml > mysql.yaml 複製程式碼

Kompose轉換

Docker Compose是最為流行的容器編排開發工具,可以方便地在Docker/Docker Swarm環境下開發、部署容器編排模板。

Kompose是Kubernetes社群開發的一個轉換工具,可以方便地將簡單的Docker Compose模板轉化成為Kubernetes的Yaml描述檔案

我們可以通過 https://github.com/kubernetes/kompose 獲取最新的kompose 工具

如下 docker-compose.yaml 模板描述了一個 WordPress 編排,其中包含兩個服務,wordpress服務和mysql服務,為了將 wordpress服務暴露給外部訪問,我們增加了一個 Kompose 特有的標籤 kompose.service.type: nodeport,將服務以NodePort方式提供對外訪問方式。

version: '2'
services:
  wordpress:
    image: wordpress:4
    environment:
      - WORDPRESS_DB_PASSWORD=password
    ports:
      - 80:80
    depends_on:
      - mysql
    labels: 
      kompose.service.type: nodeport
  mysql:
    image: mysql:5.7
    environment:
      - MYSQL_ROOT_PASSWORD=password複製程式碼

我們可以通過kompose convert命令轉換為 Kubernetes 的 Deployment和Service的資源描述,

$ kompose convert
WARN Unsupported depends_on key - ignoring        
INFO Kubernetes file "mysql-service.yaml" created 
INFO Kubernetes file "wordpress-service.yaml" created 
INFO Kubernetes file "mysql-deployment.yaml" created 
INFO Kubernetes file "wordpress-deployment.yaml" created 複製程式碼

也可以通過kompose convert --stdout命令輸出到標準輸出

總結

Kubernetes以其開放的平臺和活躍的社群征服了眾多使用者,然而其陡峭的學習曲線也讓初學者望而生畏。今天希望通過幾個技巧幫助大家簡化 Kubernetes Yaml 檔案的編寫。

阿里雲Kubernetes服務全球首批通過Kubernetes一致性認證,簡化了Kubernetes叢集生命週期管理,內建了與阿里雲產品整合,也將進一步簡化Kubernetes的開發者體驗,幫助使用者關注雲端應用價值創新。

原文連結


相關文章