pod配置资源管理

secret

保存密码,token,敏感的k8s资源

configmap(重点)

1.2加入的新特征

这类数据可以存放在镜像当中,但是放在secret当中可以更方便的控制,减少暴露的风险,保存加密的信息

secret的类型

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/kubernets.io/serviceaccount.             

[root@master01 k8s]# kubectl get secret
NAME                                 TYPE                                  DATA   AGE
default-token-zf8fj                  kubernetes.io/service-account-token   3      18d
nfs-client-provisioner-token-b5z8s   kubernetes.io/service-account-token   3      3d21h
#查看secret中的加密信息

pod引用secret:三种方式

1

挂载的方式,secret挂载到pod当中的一个或者多个容器上的卷里面

2

把secret作为容器的环境变量

3

Docker-registry 可以作为集群拉取镜像时的使用,使用secret可以实现免密登录

secret创建方式

陈述式
[root@master01 opt]# kubectl create secret generic mysecret --from-file=/opt/username.txt --from-file=/opt/password.txt
secret/mysecret created
#指定文件提取信息,generic:默认类型,opaque加密类型 ,--from-file=/opt/username.txt 从指定文件获取需要加密的信息
[root@master01 k8s]# kubectl get secrets
NAME                                 TYPE                                  DATA   AGE
default-token-zf8fj                  kubernetes.io/service-account-token   3      19d
mysecret                             Opaque                                2      80m
mysecret1                            Opaque                                2      7m22s
nfs-client-provisioner-token-b5z8s   kubernetes.io/service-account-token   3      4d1h
#查看有哪些secrets
[root@master01 k8s]# kubectl describe secrets mysecret
Name:         mysecret
Namespace:    default
Labels:       
Annotations:  

Type:  Opaque

Data
====
password.txt:  4 bytes
username.txt:  3 bytes
#查看secret详细信息

[root@master01 k8s]# echo username.txt | base64
dXNlcm5hbWUudHh0Cg==
[root@master01 k8s]# echo password.txt | base64
cGFzc3dvcmQudHh0Cg==
#以64加密方式加密



声明式
[root@master01 opt]# echo passwd.txt | base64
cGFzc3dkLnR4dAo=
[root@master01 opt]# echo username.txt | base64
dXNlcm5hbWUudHh0Cg==
#将格式转换为64加密方式

[root@master01 k8s]# kubectl explain secret
KIND:     Secret
VERSION:  v1
#看一下secret的格式


apiVersion: v1
kind: Secret
metadata:
  name: mysecret1
type:
  Opaque
data:
  username: dXNlcm5hbWUudHh0Cg==
  password: cGFzc3dkLnR4dAo=
#先要创建secret

#挂载的方式实现
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: nginx
    image: nginx:1.22
    volumeMounts:
    - name: secrets
      mountPath: "/etc/secrets"
      readOnly: false
  volumes:
  - name: secrets
    secret:
      secretName: mysecret1

[root@master01 k8s]# kubectl exec -it mypod bash
root@mypod:/etc/secrets# cd /etc/secrets/
root@mypod:/etc/secrets# ls
password  username
root@mypod:/etc/secrets# cat password
passwd.txt
保存的内容是加密内容,容器内部可以解密直接引用

例2

[root@master01 k8s]# kubectl create secret generic mysecret2 --from-file=/etc/passwd --from-file=/etc/shadow

apiVersion: v1
kind: Secret
metadata:
  name: mysecret1
type:
  Opaque
data:
  username: MTIzCg==
  password: NDU2Cg==

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

[root@master01 k8s]# kubectl exec -it mypod bash
root@mypod:/# cd /etc/secrets/
root@mypod:/etc/secrets# ls
passwd  shadow
root@mypod:/etc/secrets# cat passwd

把secret作为容器的环境变量

[root@master01 k8s]# echo 123 | base64
MTIzCg==
[root@master01 k8s]# echo 456 | base64
NDU2Cg==

#创建secret
apiVersion: v1
kind: Secret
metadata:
  name: mysecret1
type:
  Opaque
data:
  username: MTIzCg==
  password: NDU2Cg==

创建pod
 apiVersion: v1
kind: Pod
metadata:
  name: mypod1
spec:
  containers:
  - name: nginx
    image: nginx:1.22
    env:
      - name: USER
        valueFrom:
          secretKeyRef:
            name: mysecret1
#这里的name指的是secret的名称。
#表示需要用哪个secret来赋值给USER
            key: username
      - name: USER1
        valueFrom:
          secretKeyRef:
            name: mysecret1
            key: username1
#给nginx:1.22这个容器里面传了两个环境变量。这两个变量的值从secret来。分别是两条mysecret1的加密信息

docker-registry

kubectl create secret docker-registry myharbor --docker-server=20.0.0.36 --docker-username=admin --docker-password=123456
#创建docker-registry。指向harbur仓库的IP主机以及账号密码
 
kubectl describe secrets myharbor
#查看docker-registry的详细信息
 
apiVersion: v1
kind: Pod
metadata:
  name: mypod2
spec:
  containers:
    - name: nginx2
      image: hub.test.com/library/nginx:v1
  imagePullSecrets:
  - name: myharbor
  nodeName: node01
#指定node不走调度策略

ConfigMap

保存的是不需要加密的信息,configmap是1.2引入的功能,应用程序会从配置文件,命令行参数,以及环境变量中读取配置信息,通过configmap在创建容器中,给它注入我们需要的配置信息,既可以是单个的属性,也可以使整个容器的配置文件

configmap的创建方式

1.陈述式

2.声明式

kubectl create configmap game --from-file=/opt/configmap/123.txt --from-file=/opt/configmap/456.txt
#创建configmap
 
kubectl get cm
#查看configmap有多少个
kubectl describe cm game
#查看指定configmap的详细信息
#指定文件创建,可以是一个,也可以是多个

声明式

apiVersion: v1
kind: ConfigMap
metadata:
  name: bqb
data:
  gq: shuai
  wdf: shua
#configmap是键值对形式。一个键对应一个值
 
kubectl describe cm game
#查看详细信息

引用方式

apiVersion: v1
kind: Pod
metadata:
  name: mypod2
spec:
  containers:
    - name: nginx2
      image: nginx:1.22
      env:
        - name: USER1
          valueFrom:
            configMapKeyRef:
              name: et
#这里的name是configmap的名称
              key: tyu
        - name: USER2
          valueFrom:
            conigfMapKeyRef:
              name: et
              key: tyu

挂载的方式

数据卷使用comfigmap

kubectl create configmap nginx-con --from-file=/opt/configmap/nginx.conf
#创建yaml文件

使用version/config触发滚动更新机制

kubectl patch deployment nginx1 --patch '{"spec": {"template":{"metadata": {"annotations": {"version/config": "20240116"}}}}}'

数据卷使用configMap

  1. 我们通过数据卷的形式,把配置文件传给了pod内部容器
  2. Config的热更新,zaipod运行的情况下,对config的配置信息进行修改,直接生效(反应到容器当中)
  3. Configmap的热更新不会触发pod的滚动更新机制(deployment)

可以通过命令verion

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

ConfigMap:主要作用是把配置信息传给容器,主要方式也是挂载方式

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

Version/config来触发滚动更新

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

Config和20240116可以自定义

需要重启,可以重启pod

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

ConfigMap:就是把配置信息传给容器,键值对形式保存的,非加密的信息,为什么重要?

你可能感兴趣的:(linux,git,github)