一、Secret:
1、概念
用來保存密碼。token,敏感的K8S資源
這類數(shù)據(jù)可以直接存放在鏡像中,但是放在Secret中可以更方便的控制,減少暴露的風(fēng)險
Secret:保存加密的信息
2、Secret類型:
docker-registry:存儲docker倉庫的認(rèn)證信息,以及docker的組件認(rèn)證信息(私有)
generic:是Secret的默認(rèn)模式,類型Opaque,base64加密編碼的Secret,存儲用戶自定義的米密碼、秘鑰等
tls:用于存儲證書和私鑰(保存http信息)
系統(tǒng)自建的:kubernetes.io/service-account-token用來訪問系統(tǒng)的apiserver,pod會默認(rèn)使用這個kubernetes.io/service-account-token創(chuàng)建的Secret和apiserver通信。自動掛載到pod的/run/Secret/kubernetes.io/serviceaccount
3、pod如何來引用Secret:
三種方式:
- 掛載的方式,Secret掛載到pod中的一個或者多個容器上的卷里面
- 把Secret作為容器的環(huán)境變量
- 集群拉取鏡像時使用docker-registry。使用Secret可以實現(xiàn)免密登錄
4、創(chuàng)建Secret的方式:
4.1、陳述式創(chuàng)建:
#創(chuàng)建Secret,指定文件提取信息
kubectl create secret generic mysecret --from-file=/opt/username.txt --from-file=/opt/passwd.txt
generic默認(rèn)類型,Opequel加密類型
--from-file=/opt/username.txt
從指定獲取需要加密的信息
4.2、聲明式創(chuàng)建:
要先將資源轉(zhuǎn)換格式
apiVersion: v1
kind: Secret
metadata:
??name: mysecret1
type:
??Opaque
data:
??username: dXNlcm5hbWUudHh0Cg==
??passwd: cGFzc3dkLnR4dAo=
5、Secret使用:
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: nginx
image: nginx:1.22
volumeMounts:
- name: secrets
mountPath: "/etc/secret"
readOnly: false
volumes:
- name: secrets
secret:
secretName: mysecret1
?kubectl create secret generic mysecret2 --from-file=/etc/passwd --from-file=/etc/shadow
保存的內(nèi)容是加密的內(nèi)容,但是容器內(nèi)部可以直接解密引用
作為環(huán)境變量傳參到容器內(nèi)部:
?
apiVersion: v1
kind: Pod
metadata:
name: mypod1
spec:
containers:
- name: nginx
image: nginx:1.22
env:
- name: USER
valueFrom:
secretKeyRef:
name: mysecret1
key: passwd
- name: USER1
valueFrom:
secretKeyRef:
name: mysecret1
key: username
#我給nginx1.22這個容器里面?zhèn)髁藘蓚€環(huán)境變量USRE和USER1,這兩個變量的值從Secret來,分別是兩條mysecret1中的加密信息
docker-registry
存儲docker倉庫的認(rèn)證信息,以及docker的組件認(rèn)證信息(私有)
kubectl create secret docker-registry myharbor --docker-server=20.0.0.66 --docker-username=admin --docker-password=123456
apiVersion: v1
kind: Pod
metadata:
name: mypod2
spec:
containers:
- name: nginx
image: hub.test.com/library/nginx:v1
imagePullSecrets:
- name: myharbor
6、總結(jié)
Secret的三種方式:
創(chuàng)建可以時陳述式創(chuàng)建也可以時聲明式創(chuàng)建
引用方式:
掛載使用(最常用)
設(shè)定環(huán)境變量
docker-Registry
二、configmap:
1、概述
保存的是不需要加密的信息。configmap是1.2之后引入的功能,應(yīng)用程序會從配置文件,命令參數(shù),以及環(huán)境變量中讀取配置信息
將保存的信息傳給容器內(nèi)部
configmap在創(chuàng)建容器中,給他注入我們需要的配置信息。既可以是單個的屬性也可以是整個容器的配置文件
2、configmap的創(chuàng)建方式:
陳述式和聲明式
#從指定文件創(chuàng)建,可以是一個也可以是多個文件
kubectl create configmap game ?--from-file=/opt/configmap/aa.txt --from-file=/opt/configmap/bb.txt
kubectl get cm
kubectl describe cm game
使用字面值創(chuàng)建:
#直接在命令行定義好值和變量
kubectl create configmap game1 --from-literal=koeda=shuai --from-literal=kang=nb
聲明式:
apiVersion: v1
kind: ConfigMap
metadata:
??name: game
data:
??koeda: shuai
??kang: niubi
configmap是以鍵值對的形式保存
3、pod中如何使用configmap
apiVersion: v1
kind: Pod
metadata:
name: mypod2
spec:
containers:
- name: nginx1
image: nginx:1.22
env:
- name: USER1
valueFrom:
configMapKeyRef:
name: game1
key: kang
- name: USER2
valueFrom:
configMapKeyRef:
name: game1
key: koeda
數(shù)據(jù)卷使用configmap:
kubectl create configmap nginx-con --from-file=/opt/nginx-configmap/nginx.conf
vim nginx.conf
worker_processes 2;
events {
worker_connections 1024;
}
http {
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 8081;
server_name localhost;
charset utf-8;
location / {
root html;
index index.html index.php;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx1
labels:
app: nginx1
spec:
replicas: 3
selector:
matchLabels:
app: nginx1
template:
metadata:
labels:
app: nginx1
spec:
containers:
- name: nginx1
image: nginx:1.22
ports:
- containerPort: 8081
volumeMounts:
- name: nginx-config
mountPath: /etc/nginx/
- name: nginx-mount
mountPath: /usr/share/nginx/html
volumes:
- name: nginx-config
configMap:
name: nginx-con
- name: nginx-mount
hostPath:
path: /opt/html
type: DirectoryOrCreate
我們通過數(shù)據(jù)卷的形式,將文件傳到pod容器內(nèi)部
去對應(yīng)節(jié)點上,將html下創(chuàng)建index.html
訪問測試404
因為是yum安裝的所以訪問目錄時/usr/share/nginx/html,而不是默認(rèn)的root
想要在容器運(yùn)行的情況下更改配置文件,就要用到configmap的熱備份
configmap的熱更新:
在pod運(yùn)行的情況下對configmap的配置信息進(jìn)行修改,直接生效(反映到容器當(dāng)中)
#熱更新就是進(jìn)去給nginx-con的配置文件
kubectl edit cm nginx-con
因為掛載,所以更改之后容器內(nèi)的文件會自動更改
文件更新之后,需要重啟服務(wù)才能能生效
configmap的熱更新是不會觸發(fā)pod的滾動更新機(jī)制(deployment)
熱更新之后,容器中的配置文件改變,但是生效要重啟服務(wù)
version/config來觸發(fā)滾動更新機(jī)制
kubectl patch deployments.apps nginx1 --patch '{"spec": {"template": {"metadata": {"annotations": {"version/config": "20240116"}}}}}'
重啟之后再訪問:
4、總結(jié):
Secret:主要作用就是保存加密文件,主要的使用方式就是掛載方式
configmapMap:把配置信息傳給容器,主要方式也是掛載方式
configmap的熱更新,熱更新可以直接反應(yīng)到容器的內(nèi)部,也不會觸發(fā)pod的更新機(jī)制,如果不是需要重啟的配置,都可以直接生效
需要重啟的,可以通過version/config來觸發(fā)滾動更新機(jī)制
所謂的更新就是把配置信息重新傳到容器內(nèi),重啟也是一樣
configmap在工作中在工作中經(jīng)常是把配置文件傳給容器文章來源:http://www.zghlxwxcb.cn/news/detail-797707.html
configmap是以鍵值對形式保存的非加密的信息文章來源地址http://www.zghlxwxcb.cn/news/detail-797707.html
到了這里,關(guān)于【K8S 】K8S配置資源管理的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!