您現在的位置是:首頁 > 藝術

「Linux運維」kubernetes叢集常用資源(二)!

由 老男孩教育 發表于 藝術2022-12-30
簡介conf  進入容器檢視環境變數kubectl exec -it oldboyedu-linux-variate-configmap binbashenv | egrep “mysql|redis|nginx”  Secret介紹k8s

from是什麼意思中文譯

上一篇文章為大家介紹了關於微服務的基礎知識,其中包含簡介、特性、優勢以及實操案例等,本篇文章帶大家學習kubernetes叢集常用資源(二),具體請看下文。

「Linux運維」kubernetes叢集常用資源(二)!

 

  configmap介紹

| configmap和secret

在K8S中,有兩種方式管理資源的配置,分別是configmap和secret,他們的最大區別是:

configmap用來管理明文配置

secret用來管理密文配置

  | 怎麼使用configmap

建立configmap資源

在deploy中定義congfigmap型別的volumes

在deoloy的containers中掛載此volumes

  | 更新configmap配置的方法

  單配置更新法:

修改configmap資源清單並應用

重啟使用該configmap資源的pod

  多配置更換法:

準備多個configmap資源

修改dp中使用的configmap

重新apply該dp,pod會自動重啟

  configmap資源建立

  | 參考案例1

apiVersion: v1kind: ConfigMapmetadata:name: oldboyedu-database-configdata: # 單行資料 name: “oldboy” age: “20” # 多行資料 my。cnf: | host: 10。0。0。102 port: 13306 socket: /tmp/mysql。sock username: root password: oldboyedu redis。conf: | host: 10。0。0。103 port: 6379 requirepass: oldboyedu

  | 參考案例2

apiVersion: v1kind: ConfigMapmetadata:name: oldboyedu-nginxdata: nginx。conf: | worker_processes 1; events { worker_connections 1024; } http { include mime。types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; # include /usr/local/nginx/conf/conf。d/*。conf; server { listen 81; root /usr/local/nginx/html/bird/; server_name game01。oldboyedu。com; } server { listen 82; root /usr/local/nginx/html/pinshu/; server_name game02。oldboyedu。com; } server { listen 83; root /usr/local/nginx/html/tanke/; server_name game03。oldboyedu。com; } server { listen 84; root /usr/local/nginx/html/pingtai/; server_name game04。oldboyedu。com; } server { listen 85; root /usr/local/nginx/html/chengbao/; server_name game05。oldboyedu。com; } }

  使用configmap資源

  | 基於儲存卷的方式掛載

kind: PodapiVersion: v1metadata:name: oldboyedu-linux-configmaplabels: apps: mywebspec:nodeName: 10。0。0。102volumes:- name: myweb # 定義資料卷型別是configMap。 configMap: # 引用configMap的名稱。 name: oldboyedu-nginx # 引用configMap的具體的Key相關資訊。 items: # 指定configmap的key名稱,該名稱必須在cm資源中存在。 - key: nginx。conf # 可以暫時理解為掛載到容器的名稱。 path: oldboyedu-linux-nginx。conf- name: oldboyedu-db configMap: name: oldboyedu-database-config items: - key: my。cnf path: oldboyedu-linux-my。cnf - key: name path: oldboyedu-linux-name - key: redis。conf path: oldboyedu-linux-redis。confcontainers:- name: linux-web image: 10。0。0。101:5000/nginx:1。20。1 volumeMounts: - name: myweb mountPath: /oldboyedu-linux/ - name: oldboyedu-db mountPath: /oldboyedu-linux-databases-all

  執行容器

kubectl apply -f oldboyedu-linux-configmap。ymlkubectl apply -f oldboyedu-database-config。ymlkubectl apply -f oldboyedu-nginx-config。yml

  進入容器檢視配置是否已經掛載上了

kubectl exec -it oldboyedu-linux-configmap /bin/bash

「Linux運維」kubernetes叢集常用資源(二)!

  | 基於環境變數的方式掛載

kind: PodapiVersion: v1metadata:name: oldboyedu-linux-variate-configmaplabels: apps: mywebspec:nodeName: 10。0。0。103containers: - name: web image: 10。0。0。101:5000/nginx:1。20。1 env: - name: oldboyedu_mysql # 指定從哪裡取值 valueFrom: # 指定從configMap去引用資料 configMapKeyRef: # 指定configMap的名稱 name: oldboyedu-database-config # 指定configmap的key,即引用哪條資料! key: my。cnf - name: oldboyedu_redis valueFrom: configMapKeyRef: name: oldboyedu-database-config key: redis。conf - name: oldboyedu_nginx valueFrom: configMapKeyRef: name: oldboyedu-nginx key: nginx。conf

  進入容器檢視環境變數

kubectl exec -it oldboyedu-linux-variate-configmap /bin/bashenv | egrep “mysql|redis|nginx”

「Linux運維」kubernetes叢集常用資源(二)!

  Secret介紹

k8s secrets用於儲存和管理一些敏感資料,比如密碼,token,金鑰等敏感資訊

它把 Pod 想要訪問的加密資料存放到 Etcd 中,然後使用者就可以透過在 Pod 的容器裡掛載 Volume 的方式或者環境變數的方式訪問到這些 Secret 裡儲存的資訊了

與ConfigMap類似,區別在於secret儲存敏感資料,所有的資料都需要經過base64進行編碼

使用secret主要儲存的是憑據資訊

  | Secret的三種類型

  Opaque:

base64 編碼格式的 Secret,用來儲存密碼、金鑰等

但資料也可以透過base64 –decode解碼得到原始資料,所有加密性很弱

  Service Account:

用來訪問Kubernetes API,由Kubernetes自動建立,並且會自動掛載到Pod的/run/secrets/kubernetes。io/serviceaccount 目錄中

  kubernetes.io/dockerconfigjson:

用來儲存私有docker registry的認證資訊

  | Opaque型別

Opaque 型別的資料是一個 map 型別,要求value是base64編碼

  手動建立base64加密

echo -n ‘admin’ | base64echo -n ‘1’ | base64

  解密

echo ‘MWYyZDFlMmU2N2Rm’ | base64 ——decode

這裡需要注意的是,像這樣建立的 Secret 物件,它裡面的內容僅僅是經過了轉碼,而並沒有被加密

在真正的生產環境中,你需要在 Kubernetes 中開啟 Secret 的加密外掛,增強資料的安全性

  | Service Account型別

Service Account 物件的作用,就是 Kubernetes 系統內建的一種“服務賬戶”,它是 Kubernetes 進行許可權分配的物件

比如,Service Account A,可以只被允許對 Kubernetes API 進行 GET 操作,而 Service Account B,則可以有 Kubernetes API 的所有操作許可權

  | kubernetes.io/dockerconfigjson型別

用來建立使用者docker registry認證的Secret,直接使用kubectl create命令建立即可,如下:

kubectl create secret docker-registry myregistry ——docker-server=DOCKER_SERVER ——docker-username=DOCKER_USER ——docker-password=DOCKER_PASSWORD ——docker-email=DOCKER_EMAIL

「Linux運維」kubernetes叢集常用資源(二)!

如果我們需要拉取私有倉庫中的docker映象的話就需要使用到上面的myregistry這個Secret:

apiVersion: v1kind: Podmetadata:name: testspec:containers:- name: test image: 10。0。0。101:5000/nginx:1。20。1imagePullSecrets:- name: myregistry

  secret資源建立

  | 方式一:kubectl create secret 命令

username。txt 賬戶名和 password。tx 密碼 檔案內容如下:

# cat username。txtadmin# cat password。txt1

  建立 secret

kubectl create secret generic user ——from-file=。/username。txtkubectl create secret generic user ——from-file=。/password。txt

「Linux運維」kubernetes叢集常用資源(二)!

  | 方式二:透過yml檔案建立

apiVersion: v1kind: Secretmetadata: name: db-user-passwd# Opaque型別是使用者自定義型別。type: Opaquedata: # 定義兩條資料,其值必須是base64編碼後的資料,否則建立會報錯 user: YWRtaW4= pass: MWYyZDFlMmU2N2Rm

 注:

透過yaml建立Opaque型別的Secret值需要base64編碼

  建立secret

kubectl create -f oldboyedu-secret。yml

  使用secret資源

  | 基於儲存卷的方式掛載

kind: PodapiVersion: v1metadata: name: oldboyedu-linux-volume-secret labels: apps: mywebspec: nodeName: 10。0。0。102 volumes: - name: myweb # 定義資料卷型別是secret secret: # 引用secret的名稱。 secretName: db-user-passwd # 引用secret具體的Key相關資訊。 items: # 指定secret的key名稱,該名稱必須在secret資源中存在。 - key: user # 可以暫時理解為掛載到容器的名稱。 path: username。txt - key: pass path: password。txt containers: - name: linux-web image: 10。0。0。101:5000/nginx:1。20。1 volumeMounts: - name: myweb mountPath: /oldboyedu-linux/

  執行容器

kubectl apply -f oldboyedu-linux-volume-secret。yml

  進入容器檢視配置是否已經掛載上了

kubectl exec -it oldboyedu-linux-volume-secret /bin/bash

「Linux運維」kubernetes叢集常用資源(二)!

  | 基於環境變數的方式掛載

kind: PodapiVersion: v1metadata: name: oldboyedu-linux-env-secret-demo labels: apps: mywebspec: nodeName: 10。0。0。102 containers: - name: linux-web image: 10。0。0。101:5000/nginx:1。20。1 env: - name: oldboyedu_linux_username # 指定從哪裡取值 valueFrom: # 指定從secret去引用資料 secretKeyRef: # 指定secret的名稱 name: db-user-passwd # 指定secret的key,即引用哪條資料! key: user - name: oldboyedu_linux_password valueFrom: secretKeyRef: name: db-user-passwd key: pass

  執行容器

kubectl apply -f oldboyedu-linux-env-secret。yml

  進入容器檢視

kubectl exec -it oldboyedu-linux-env-secret-demo /bin/bashenv | grep oldboyedu_linux

  subPath介紹

  | 什麼是 subPath

為了支援單一個pod多次使用同一個volume而設計,subpath翻譯過來是子路徑的意思,如果是資料卷掛載在容器,指的是儲存卷目錄的子路徑,如果是配置項configMap/Secret,則指的是掛載在容器的子路徑

  | subPath的使用方法

subPath的使用方法一共有兩種:

同一個pod中多容器掛載同一個卷時提供隔離;

將configMap和secret作為檔案掛載到容器中而不覆蓋掛載目錄下的檔案;

  | 同一個pod中多容器掛載同一個卷時提供隔離

kind: PodapiVersion: v1metadata: name: oldboyedu-linux-subpath labels: apps: mywebspec: nodeName: 10。0。0。102 volumes: - name: data01 emptyDir: {} containers: - name: linux-web image: 10。0。0。101:5000/nginx:1。20。1 volumeMounts: - name: data01 mountPath: /oldboyedu-linux-data # 當掛載相同當儲存卷時,如果subPath的值相同則共享資料,若不同,則隔離兩者容器的資料共享。 subPath: “oldboyedu-linux-c1” - name: linux80-alpine image: 10。0。0。101:5000/alpine command: [“sleep”,“600”] volumeMounts: - name: data01 mountPath: /oldboyedu-linux-data-001 subPath: “oldboyedu-linux-c2”

推薦文章