您現在的位置是:首頁 > 藝術
「Linux運維」kubernetes叢集常用資源(二)!
from是什麼意思中文譯
上一篇文章為大家介紹了關於微服務的基礎知識,其中包含簡介、特性、優勢以及實操案例等,本篇文章帶大家學習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
| 基於環境變數的方式掛載
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”
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
如果我們需要拉取私有倉庫中的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
| 方式二:透過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
| 基於環境變數的方式掛載
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”
推薦文章
- 女子打車被婆家罰跪,有無精神病都不該如此“嚇唬” | 新京報快評
正如事發後,當地婦聯工作人員所說,無論出於何種目的,婆家對女子進行罰跪罰跑肯定是不對的,是否涉嫌違法,應由警方調查認定...
- 教師工資分配機制調整,這幾類教師“春天”來了,將成為高薪職業
新的教師工資分配方案中,不再搞“平均主義”,將會加大績效工資的比例,並且調高課時費,讓承擔一線教學任務的教師能夠獲得更多的收入...
- 慕田峪長城索道和纜車的區別,必看
剛剛改造完的纜車嶄新亮麗,吊廂可容納8人,透明的廂體能夠使遊客在乘坐過程中360°欣賞長城美景,體驗“空中看長城”慕田峪索道+滑道介紹(慕田峪長城施必得滑道娛樂有限公司)慕田峪索道為客運吊椅式觀光索道,全場550米...