天天看點

在 Kubernetes 叢集如何支援私有鏡像

在 Kubernetes 叢集如何支援私有鏡像

鏡像下載下傳、域名解析、時間同步請點選

阿裡巴巴開源鏡像站

操作方法

Kubernetes叢集支援使用私有鏡像編排容器。首先需建立密鑰用于編排容器,并且可實作無密鑰編排。

一、使用密鑰編排容器

1、使用kubectl連接配接Kubernetes叢集的Master節點,詳情請參見

通過kubectl連接配接Kubernetes叢集

2、執行如下指令,建立拉取私有鏡像的密鑰。

kubectl create secret docker-registry [$Reg_Secret] --docker-server=[$Registry] --docker-username=[$Username] --docker-password=[$Password] --docker-email=[$Email]           
注:
  • [$Reg_Secret]為密鑰的鍵名稱,可自行定義。
  • [$Registry]為Docker倉庫位址。
  • [$Username]為登入Docker倉庫的使用者名。
  • [$Password]為登入Docker倉庫的密碼。
  • [$Email]為郵件位址,該配置項可選填。

3、在編排的YAML檔案中加入密鑰相關配置項,完成後YAML檔案類似如下。

containers:
    - name: foo
     image: [$Registry]/abc/test:1.0
imagePullSecrets:
    - name: [$Reg_Secret]           
  • imagePullSecrets

    配置為在聲明拉取鏡像時指定的密鑰。
  • 詳情資訊參見官方文檔 使用私有倉庫

二、實作無密鑰編排

為了避免每次使用私有鏡像部署時,都需要引用密鑰,您可将secret添加到namespace的default service account中,參見

Add ImagePullSecrets to a service account

本例中采用手動配置的方式,修改命名空間的預設服務帳戶default,進而将此secret作為imagePullSecret。

1、執行如下指令,檢視之前建立的密鑰。

kubectl get secret [$Reg_Secret]           

系統顯示類似如下:

NAME          TYPE                             DATA      AGE
[$Reg_Secret] kubernetes.io/dockerconfigjson   1         13m           

2、依次執行如下指令,将服務賬号default的配置導出到sa.yaml檔案并檢視該檔案。

kubectl get serviceaccounts default -o yaml > ./sa.yaml
cat sa.yaml           
apiVersion: v1
kind: ServiceAccount
metadata:
  creationTimestamp: 2015-08-07T22:02:39Z
  name: default
  namespace: default
  resourceVersion: "243024"             ##注意該項  
selfLink: /api/v1/namespaces/default/serviceaccounts/default
  uid: 052fb0f4-3d50-11e5-b066-42010af0d7b6
secrets:
- name: default-token-uudge           

3、編輯sa.yaml檔案,删除原resourceVersion配置項,增加拉取鏡像的密鑰配置項imagePullSecrets。修改後的配置如下所示:

apiVersion: v1
kind: ServiceAccount
metadata:
  creationTimestamp: 2015-08-07T22:02:39Z
  name: default
  namespace: default
  selfLink: /api/v1/namespaces/default/serviceaccounts/default
  uid: 052fb0f4-3d50-11e5-b066-42010af0d7b6
secrets:
- name: default-token-uudge
imagePullSecrets:                 ##增加該項
- name: regsecret           

4、執行如下指令,用sa.yaml配置檔案更新default服務賬号。

kubectl replace serviceaccount default -f ./sa.yaml           
serviceaccount "default" replaced           

5、本文以編排tomcat為例,執行

kubectl create -f

指令建立Pod。該配置檔案如下所示。

apiVersion: apps/v1beta2 # for versions before 1.8.0 use apps/v1beta1
kind: Deployment
metadata:
  name: tomcat-deployment
  labels:
    app: tomcat
spec:
  replicas: 1
  selector:
    matchLabels:
      app: tomcat
  template:
    metadata:
      labels:
        app: tomcat
    spec:
      containers:
      - name: tomcat
        image: [$Registry]/abc/test:1.0
        ports:
        - containerPort: 8080           

6、若配置正确,Pod會啟動成功。執行如下指令,檢視配置項。

kubectl get pod tomcat-XXX -o yaml           

系統顯示類似如下,确認無密鑰編排成功。

spec:
  imagePullSecrets:
  - nameregsecretey           
提供全面,高效和穩定的系統鏡像、應用軟體下載下傳、域名解析和時間同步服務。”