k8s---配置资源管理

内容预知

目录

内容预知

secret资源配置

secert的几种模式

pod如何来引用secret

陈述式创建secret

声明式+base64编码配置secret

将secret用vlumes的方式挂载到pod中

传参的方式将环境变量导入pod

如何通过secret加密方式获取仓库密码

configmap的资源配置

陈述式创建configmap资源配置

声明式配置configmap资源

如何在pod引用?

数据卷使用configmap(挂载方式实现configmap)

configmap的热更新

总结

secret和configMap的区别


secret资源配置

Secret 是用来保存密码、token、密钥等敏感数据的 k8s 资源,这类数据虽然也可以存放在 Pod 或者镜像中,但是放在 Secret 中是为了更方便的控制如何使用数据,并减少暴露的风险。

secert的几种模式

复制代码
[root@master01 opt]# kubectl create secret 
docker-registry  generic          tls   

docker-registry:存储docker仓库认证信息,以及docker组件认证信息。(私有)

generic:是secret的默认模式,Opaque base64 加密编码的secret。用户自定义密码,密钥等等。    

tls:TLS/SSL  用于存储证书和私钥,https

系统自建:kubernetes.io/service-account-token用来访问系统的apiserver。pod会默认使用这个kubernetes.io/service-account-token创建的secret和apiserver通信。自动挂载到pod的/run/secret/kubernetes.io/service-account

pod如何来引用secret

3种方式:

  • 1.挂载方式,secret挂载到pod当中的一个或者多个容器上的卷 里面。
  • 2.把secret作为容器的环境变量
  • 3.docker-registry可以作为集群拉取镜像时使用。使用secret可以实现免密登录。

陈述式创建secret

复制代码
echo "zzr" > username.txt
echo "123" > passwd.txt

kubectl create secret generic mysecret --from-file=/opt/username.txt --from-file=/opt/passwd.txt

kubectl get sercet

默认类型的加密方式: Opaque

声明式+base64编码配置secret

复制代码
echo username.txt | base64
echo password.txt | base64
复制代码
apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type:
  Opaque
data:
  username: dXNlcm5hbWUudHh0Cg==
  passwd: cGFzc3dkLnR4dAo=

将secret用vlumes的方式挂载到pod中

复制代码
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: nginx
    image: nginx:1.22
    volumeMounts:
    - name: secret
      mountPath: "/etc/secrets"
      readOnly: false
  volumes:
  - name: secrets
    secret:
      secretName: mysecret1

传参的方式将环境变量导入pod

复制代码
-----------创建mysecret1---------------------
echo username.txt | base64
echo username1.txt | base64
vim sec.yaml
apiVersion: v1
kind: Secret
metadata:
  name: mysecret1
type:
  Opaque
data:
  username: dXNlcm5hbWUudHh0Cg==
  username1: dXNlcm5hbWUxLnR4dAo=
wq
------------创建完毕---------------------------



----------将环境变量引入-----------------------

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: nginx
    image: nginx:1.22
    env:
      - name: USER
        valueFrom:
          secretKeyRef:
            name: mysecret1
            key: username
      - name: USER1
        valueFrom:
          secretKeyRef:
            name: mysecret1
            key: username1

我给nginx1.22这个容器里面传了两个环境变量,这两个变量的值从secret来,分别是两条mysecret1的加密信息。
wq
-------------------

进入容器观察

如何通过secret加密方式获取仓库密码

复制代码
kubectl create secret docker-registry myharbor --docker-server=20.0.0.64 --docker-username=admin --docker-password=123456

kubectl describe secrets myharbor
复制代码
apiVersion: v1
kind: Pod
metadata:
  name: mypod2
spec:
  containers:
  - name: nginx1
    image: hub.zzr.com/v1/nginx:zzr
  imagePullSecrets:
  - name: myharbor
  nodeName: master01
  
wq
kubectl apply -f sec3.yaml

configmap的资源配置

保存的是不需要加密的信息。configmap是1.2引入的功能,应用程序会从配置文件,命令参数,以及环境变化中读取配置信息。

configmap在创建容器中,给他注入我们需要的配置信息。即可以是单个的属性也可以整个容器的配置文件。

陈述式创建configmap资源配置

复制代码
cd /opt
mkdir configmap
cd configmap

vim game.txt
emo=123
kda=445

vim abc.txt
zzr=123
hj=456

kubectl create configmap game --from-file=/opt/configmap/game.txt --from-file=/opt/configmap/abc.txt

声明式配置configmap资源

复制代码
apiVerdion: v1
kind: ConfigMap
metadata:
  name: game
data:
  hj: aaa
  zzr: bbb
data里面要键值对形式

如何在pod引用?

复制代码
apiVersion: v1
kind: Pod
metadata:
  name: mypod2
spec:
  containers:
    - name: nginx1
      image: nginx:1.22
      env:
        - name: USER1
          valueFrom:
            configMapKeyRef:
              name: game
              key: zzr
        - name: USER2
          valueFrom:
            configMapKeyRef:
              name: game
              key: hj

数据卷使用configmap(挂载方式实现configmap)

复制代码
cd /opt
mkdir nginx-configmap
cd nginx-configmap

vim nginx.conf
kubectl create configmap nginx-conf --from-file=/opt/nginx-configmap/nignx.conf

kubectl get cm
kubectl describe nginx-conf
复制代码
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-conf
      - name: nginx-mount
        hostPath:
          path: /opt/html
          type: DirectoryOrCreate

          
wq

由于configmap的热更新机制,可以直接对文件进行修改

复制代码
kubectl edit cm nginx-conf

location
root /usr/share/nginx/html

kubectl patch deployments.apps nginx1 --patch '{"spec": {"template": {"metadata": {"annotations": {"version/confgi": "20240116"}}}}}'

更新完配置文件重启更新

configmap的热更新

1.我们通过数据卷的形式,把配置文件传给了pod内部容器。

2.config的热更新,在pod运行的情况下,对configmap的配置信息进行修改,直接生效(反应到容器当中)

3.configmap的热更新不会触发pod的滚动更新机制(deployment)

version/config来触发滚动更新。

复制代码
kubectl patch deployments.apps nginx1 --patch '{"spec": {"template": {"metadata": {"annotations": {"version/config": "20240116"}}}}}'

kubectl get pod

总结

secert:主要作用是保存加密文件,主要的使用方式就是挂载方式

comfigmap:把配置信息传给容器。主要方式也是挂载方式。

configmap的热更新:热更新可以直接反应到容器的内部,也不会触发pod的更新机制。如果不是需要重启的配置,都可以直接生效

version/config来触发热更新

需要重启的,可以重启pod

在工作中configMap就是将配置信息传递给容器。通过键值对形式保存的非加密信息。

更新:就是把配置信息重新传到容器内,重启也是一样。

secret和configMap的区别

secret是加密的信息。

configMap是非加密信息。可以传递配置信息给容器

相关推荐
KubeSphere 云原生1 小时前
云原生周刊:在 Kubernetes 上运行机器学习
云原生·容器·kubernetes
码界奇点1 小时前
通往Docker之路从单机到容器编排的架构演进全景
docker·容器·架构
阿Y加油吧1 小时前
Docker从入门到实战——含容器部署、docker基础、项目部署
运维·docker·容器
不知道累,只知道类2 小时前
记一次诡异的“偶发 404”排查:CDN 回源到 OSS 导致 REST API 失败
java·云原生
victory04313 小时前
progen2 docker镜像打包命令文档
运维·docker·容器
AKAMAI4 小时前
Akamai推出Akamai Inference Cloud (AI推理云),重新定义人工智能的应用场景与实现方式
人工智能·云原生·云计算
算是难了4 小时前
Docker基础总结
运维·docker·容器
ityangs5 小时前
GitLab 私服(基于 Docker)搭建方案
git·docker·容器·gitlab
沐雨风栉6 小时前
告别设备限制!CodeServer+cpolar让VS Code随时随地在线编程
云原生·eureka·重构·pdf·开源
技术杠精7 小时前
Docker Swarm 的负载均衡和平滑切换原理
docker·容器·负载均衡·1024程序员节