15.配置资源管理

文章目录

  • 配置资源管理
    • Secret
      • 陈述式创建
      • 声明式创建
      • 存储卷挂载
      • 变量引用
      • 创建tls类型
      • 创建dockerconfigjson类型
        • 安装docker,创建 harbor仓库
        • pod节点设置
    • ConfigMap
      • 创建
      • 挂载目录
      • 挂载文件
      • 以环境变量引用
      • 通过打补丁的方式修改配置
    • 总结

配置资源管理

Secret

  • Secret 是用来保存密码、token、密钥等敏感数据的 k8s 资源

  • 这类数据虽然也可以存放在 Pod 或者镜像中,但是放在 Secret 中是为了更方便的控制如何使用数据,并减少暴露的风险

  • Secret 有四种类型:

    • kubernetes.io/service-account-token:由 Kubernetes 自动创建,用来访问 APIServer 的 Secret,Pod 会默认使用这个 Secret 与 APIServer 通信, 并且会自动挂载到 Pod 的 /run/secrets/kubernetes.io/serviceaccount 目录中;
    • Opaque :base64 编码格式的 Secret,用来存储用户自定义的密码、密钥等,默认的 Secret 类型;
    • kubernetes.io/dockerconfigjson :用来存储私有 docker registry 的认证信息。
    • kubernetes.io/tls :用来存储 TLS 证书和私钥信息。
  • https://kubernetes.io/docs/concepts/configuration/secret/

陈述式创建

##创建准备文件
echo -n "zhangsan" > username.txt
echo -n "123" > password.txt
##通过文件
##创建secret
kubectl create secret generic secret-demo1 --from-file=username.txt --from-file=password.txt
##查看创建的  secret
kubectl get secrets

15.配置资源管理_第1张图片

##查看信息
kubectl describe secrets secret-demo1 

kubectl get secrets secret-demo1 -o yaml

15.配置资源管理_第2张图片

##信息通过  base64转码
echo -n "zhangsan" | base64

15.配置资源管理_第3张图片

##通过 键值对创建
##创建secret
kubectl create secret generic secret-demo2 --from-literal=username=lisi

15.配置资源管理_第4张图片

声明式创建

##先将值进行  base64转码
echo -n zhangsan | base64
echo -n 123 | base64
##利用命令生成yaml文件
kubectl get secrets secret-demo1 -o yaml > secrets-demo.yaml
apiVersion: v1
kind: Secret
metadata:
  name: secret-demo3
  namespace: default
type: Opaque
data:
  username: emhhbmdzYW4=
  passwd: MTIz
##利用yaml创建secrets
kubectl apply -f secrets-demo.yaml

##查看创建状态
kubectl describe secrets secret-demo3

15.配置资源管理_第5张图片

存储卷挂载

apiVersion: v1
kind: Pod
metadata:
  name: poddemo1
spec:
  containers:
  - image: nginx:1.14
    name: poddemo1
    volumeMounts:
    - name: secrets
      mountPath: "/usr/share/nginx/html"
      readOnly: true
  volumes:
  - name: secrets
    secret:
      secretName: secret-demo1
##进入pod查看
kubectl exec -it poddemo1 bash
ls /usr/share/nginx/html

15.配置资源管理_第6张图片

变量引用

apiVersion: v1
kind: Pod
metadata:
  name: poddemo2
spec:
  containers:
  - image: nginx:1.14
    name: poddemo2
    env:
    - name: TEST_USER
      valueFrom:
        secretKeyRef:
          name: secret-demo1
          key: username
    - name: TEST_PASSWD
      valueFrom:
        secretKeyRef:
          name: secret-demo1
          key: password
    envFrom:
    - secretRef:
        name: secret-demo2
##进入pod查看
kubectl exec -it poddemo2 bash

15.配置资源管理_第7张图片

创建tls类型

cd /etc/kubernetes/
cd pki/
cp ca* /opt/ 
cd /opt/
kubectl create secret tls tls-secret --cert=./ca.crt --key=./ca.key

15.配置资源管理_第8张图片

创建dockerconfigjson类型

安装docker,创建 harbor仓库

##准备 docker  harbor的服务器

##首先,先修改   daemon.json  配置文件

vim /etc/docker/daemon.json

{
  "insecure-registries": ["http://192.168.242.71:80"],   
    ##注意在末尾添加  ,
    
  "registry-mirrors": ["镜像加速URL"]
}


##重启Docker服务
systemctl restart docker 
##上传  Docker harbor 安装文件并安装
##安装  Docker-compose  服务

cd /opt/

tar xf harbor-offline-installer-v1.10.18.tgz


chmod +x docker-compose
mv /opt/docker-compose /usr/local/bin/docker-compose
docker-compose --version
##修改  harbor  配置文件

cd /opt/harbor

vim  harbor.yml


---第5行---
hostname: 192.168.242.71

---第13行---
注释掉https的配置项

---第27行
harbor_admin_password: Harbor12345
##记住harbor的密码
##先做前其准备或者之间安装 harbor

cd /opt/harbor

./prepare


./install.sh        ##自动安装



###查看所有的镜像是否安装成功

docker-compose ps

15.配置资源管理_第9张图片

###在网页中登陆到 harbor

http://192.168.242.67

用户:admin
密码:Harbor12345

##就可以看见页面

15.配置资源管理_第10张图片

##推送镜像到  仓库中
docker tag nginx:1.14 192.168.242.71/test/nginx:1.14
docker login -u admin -p Harbor12345 http://192.168.242.71
docker push 192.168.242.71/test/nginx:1.14

15.配置资源管理_第11张图片

pod节点设置

##所有的node节点修改docker配置文件
##首先,先修改   daemon.json  配置文件

vim /etc/docker/daemon.json

{
  "insecure-registries": ["http://192.168.242.71:80"],   
    ##注意在末尾添加  ,
    
  "registry-mirrors": ["镜像加速URL"]
}


##重启Docker服务
systemctl restart docker 
##创建dockerconfigjson的secret

kubectl create secret docker-registry docker-auth --docker-username=admin --docker-server=http://192.168.242.71:80 --docker-password=Harbor12345 [email protected]

在这里插入图片描述

15.配置资源管理_第12张图片

##创建 pod
vim docker-secret-demo.yaml
apiVersion: v1
kind: Pod
metadata:
  name: docker-dem02
spec:
  nodeSelector:
    name: b
  imagePullSecrets:
  - name: docker-auth
  containers:
  - image: 192.168.242.71:80/test/nginx:1.14
    name: docker-dem02
    ports:
    - containerPort: 85
    volumeMounts:
    - name: secrets
      mountPath: "/usr/share/nginx/html"
      readOnly: true
  volumes:
  - name: secrets
    secret:
      secretName: secret-demo1

在这里插入图片描述

ConfigMap

  • 与Secret类似,区别在于ConfigMap保存的是不需要加密配置的信息。
  • ConfigMap 功能在 Kubernetes1.2 版本中引入,许多应用程序会从配置文件、命令行参数或环境变量中读取配置信息。ConfigMap API 给我们提供了向容器中注入配置信息的机制,ConfigMap 可以被用来保存单个属性,也可以用来保存整个配置文件或者JSON二进制大对象。

创建

##创建准备文件
mkdir /opt/cm
cd /opt/cm
echo -n 'zhangsan' > username
echo -n '123' > password
##利用文件创建
##创建cm
kubectl create cm cm-demo1 --from-file=/opt/cm/username
##查看创建的cm
kubectl get cm

##查看cm 的详细信息
kubectl describe cm cm-demo1

15.配置资源管理_第13张图片

##以yaml格式查看cm配置
kubectl get cm cm-demo1 -o yaml

15.配置资源管理_第14张图片

##利用键值对创建 cm
kubectl create cm cm-demo2 --from-literal=name=lisi

15.配置资源管理_第15张图片

挂载目录

cd /opt/cm
echo '123456' > index.html
##创建cm
kubectl create cm cm-demo3 --from-file=index.html

15.配置资源管理_第16张图片

##创建用于挂载的pod
kubectl run pod_demo1 --image=nginx:1.14 --port=80 -o yaml --dry-run=client > pod-demo1.yaml
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: pod-demo1
  name: pod-demo1
spec:
  volumes:
  - name: html
    configMap:
      name: cm-demo3

  containers:
  - image: nginx:1.14
    name: pod-demo1
    ports:
    - containerPort: 80
    volumeMounts:
    - name: html
      mountPath: /usr/share/nginx/html
##访问pod查看
kubectl get pods -o wide
curl 10.244.3.86

在这里插入图片描述

在这里插入图片描述

##热更新
kubectl edit cm cm-demo3

##修改里面的内容

15.配置资源管理_第17张图片

在这里插入图片描述

挂载文件

##进入到pod容器中,导出文件
kubectl exec -it pod-demo1 bash
cd /etc/nginx/

##导出pod容器的文件
kubectl cp default/pod-demo1:/etc/nginx/nginx.conf ./nginx.conf
##创建cm文件
kubectl create cm cm-demo4 --from-file=nginx.conf

15.配置资源管理_第18张图片

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: pod-demo2
  name: pod-demo2
spec:
  volumes:
  - name: html
    configMap:
      name: cm-demo4

  containers:
  - image: nginx:1.14
    name: pod-demo2
    ports:
    - containerPort: 80
    volumeMounts:
    - name: html
      mountPath: /etc/nginx/nginx.conf
      subPath: nginx.conf                      ##挂载的是文件时,要添加的东西

15.配置资源管理_第19张图片

以环境变量引用

kubectl create deployment myapp --image=nginx:1.14 --port=80 --replicas=3 --dry-run=client -o yaml > deploy-demo.yaml
##创建 cm
kubectl create cm cm-demo5 --from-file=username --from-literal=password=123
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deploy-test
spec:
  replicas: 3
  selector:
    matchLabels:
      app: deploy-test
  template:
    metadata:
      labels:
        app: deploy-test
    spec:
      containers:
      - image: nginx:1.14
        name: nginx
        ports:
        - containerPort: 80
        env:
        - name: username
          valueFrom:
            configMapKeyRef:
              name: cm-demo5
              key: username
        - name: password
          valueFrom:
            configMapKeyRef:
              name: cm-demo4
              key: password
      - image: busybox
        name: busybox
        command: ["/bin/sh", "-c", "sleep 36000"]
        envFrom:
        - configMapRef:
            name: cm-demo3
##进入到容器中,查看env
kubectl exec -it deploy-test-74ff77bd97-88bhv -c nginx sh
env

15.配置资源管理_第20张图片

15.配置资源管理_第21张图片

通过打补丁的方式修改配置

#修改副本数量
kubectl patch deployments.apps deploy-test --patch '{"spec": {"replicas": 1}}'

15.配置资源管理_第22张图片

##修改镜像
kubectl patch deployments.apps deploy-test --patch '{"spec": {"template": {"spec": {"containers": [{"name": "nginx", "image": "nginx:1.15"}]}}}}'

15.配置资源管理_第23张图片

总结

  • ConfigMap 资源 简称 cm 用于保存 配置文件 环境变量 命令行参数 之类的不需要加密的信息
    创建 cm资源
kubectl create cm <资源名称>  --from-file=文件|目录    --from-literal=<键名>=<键值>
  • 查看 cm资源
kubectl get cm <资源名称> -o yaml    或    kubectl  describe cm <资源名称> 
  • 使用 cm资源

  • 挂载的方式:

    • 在 Pod 资源配置中的 spec.volumes 字段设置 configMap 类型的存储卷
    • 在容器配置中用volumeMounts将卷挂载到容器的挂载点目录上,cm资源数据的键名会作为文件名,cm资源数据的键值会作为文件内容(以目录形式挂载的cm卷支持热更新)
    • 在容器配置中用volumeMounts.subPath指定文件名,可实现将卷挂载到容器的文件上(以文件形式挂载的cm卷不支持热更新)
  • 容器环境变量引用的方式:(不支持热更新)

    • 在容器配置中用 env.name 字段自定义容器的环境变量名,在 env.valueFrom.configMapKeyRef.name/key 字段指定自定义的变量的值从哪个 cm资源 的 键 获取 值
      在容器配置中用 envFrom.configMapRef.name 字段指定 cm资源的名称,使得 cm资源的 键 和 值 作为容器的环境变量名和环境变量的值
  • Secret 资源 用于保存密码文件、tls证书/私钥文件、token令牌字符串、镜像私有仓库认证信息 等需要加密的敏感的信息

  • Secret资源的 4 种类型:

    • Opaque:默认的Secret资源类型,可以通过选项引用文件、目录、键值对的方式创建Secret资源,并且资源数据的键值会自动转换成base64编码格式
    • kubernetes.io/tls:用于存储 tls 证书和私钥文件的信息
    • kubernetes.io/dockerconfigjson:用于存储K8S从harbor等镜像私有仓库拉取镜像时做认证的信息
    • kubernetes.io/service-account-token:当创建serviceaccount账户资源后K8S会自动创建相关的Secret资源,当Pod访问apiserver时需要使用此Secret资源做认证
  • 创建 Secret资源

kubectl create secret generic|tls|docker-registry <资源名称> 选项
                      generic <资源名称> --from-file=文件|目录    --from-literal=<键名>=<键值>
                      tls <资源名称> --cert=证书文件路径  --key=私钥文件路径
                      docker-registry <资源名称> --docker-server=私有仓库URL地址 --docker-username=用户名 --docker-password=密码 --docker-email=邮箱
  • 使用 Secret资源

  • 挂载的方式:

    • 在 Pod 资源配置中的 spec.volumes 字段设置 secret 类型的存储卷
    • 在容器配置中用volumeMounts将卷挂载到容器的挂载点目录上,Secret资源数据的键名会作为文件名,Secret资源数据的键值会作为文件内容
  • 容器环境变量引用的方式:

    • 在容器配置中用 env.name 字段自定义容器的环境变量名,在 env.valueFrom.secretKeyRef.name/key 字段指定自定义的变量的值从哪个 Secret资源 的 键 获取 值
    • 在容器配置中用 envFrom.secretRef.name 字段指定 Secret资源的名称,使得 Secret资源的 键 和 值 作为容器的环境变量名和环境变量的值
  • 陈述式管理资源的方式 修改或添加 资源对象的配置

kubectl patch deployment myapp-demo1 --patch '{"第一层字段": {"第二层字段": {...}}}'
kubectl patch deployment myapp-demo1 --patch '{"spec": {"template": {"spec": {"containers": [{"name": "myapp", "image": "soscscs/myapp:v2"}]}}}}'

你可能感兴趣的:(13.Kubernetes,kubernetes)