kubernetes集群常用资源(二)!

  发布时间:2025-11-04 04:13:08   作者:玩站小弟   我要评论
上一篇文章为大家介绍了关于微服务的基础知识,其中包含简介、特性、优势以及实操案例等,本篇文章带大家学习kubernetes集群常用资源(二),具体请看下文。kubernetes集群常用资源(一​)!L。

  上一篇文章为大家介绍了关于微服务的集群基础知识,其中包含简介、常用特性、资源优势以及实操案例等,集群本篇文章带大家学习kubernetes集群常用资源(二),常用具体请看下文。资源

  kubernetes集群常用资源(一​)!LinuxSRE工程师培训

  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: v1 kind: ConfigMap metadata: name: oldboyedu-database-config data: # 单行数据 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: v1 kind: ConfigMap metadata: name: oldboyedu-nginx data: 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: Pod apiVersion: v1 metadata: name: oldboyedu-linux-configmap labels: apps: myweb spec: nodeName: 10.0.0.102 volumes: - 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.conf containers: - 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.yml kubectl apply -f oldboyedu-database-config.yml kubectl apply -f oldboyedu-nginx-config.yml

  进入容器查看配置是否已经挂载上了

kubectl exec -it oldboyedu-linux-configmap /bin/bash

  | 基于环境变量的方式挂载

kind: Pod apiVersion: v1 metadata: name: oldboyedu-linux-variate-configmap labels: apps: myweb spec: nodeName: 10.0.0.103 containers: - 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/bash env | egrep "mysql|redis|nginx"

  Secret介绍

  k8s secrets用于存储和管理一些敏感数据,资源比如密码,集群token,常用密钥等敏感信息

  它把 Pod 想要访问的资源加密数据存放到 Etcd 中,b2b信息网然后用户就可以通过在 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 | base64 echo -n 1 | base64

  解密

echo MWYyZDFlMmU2N2Rm | base64 --decode

  这里需要注意的是,像这样创建的 Secret 对象,它里面的内容仅仅是经过了转码,而并没有被加密

  在真正的生产环境中,你需要在 Kubernetes 中开启 Secret 的WordPress模板加密插件,增强数据的安全性

  | 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: v1 kind: Pod metadata: name: test spec: containers: - name: test image: 10.0.0.101:5000/nginx:1.20.1 imagePullSecrets: - name: myregistry

  secret资源创建

  | 方式一:kubectl create secret 命令

  username.txt 账户名和 password.tx 密码 文件内容如下:

# cat username.txt admin # cat password.txt 1

  创建 secret

kubectl create secret generic user --from-file=./username.txt kubectl create secret generic user --from-file=./password.txt

  | 方式二:通过yml文件创建

apiVersion: v1 kind: Secret metadata: name: db-user-passwd # Opaque类型是用户自定义类型. type: Opaque data: # 定义两条数据,其值必须是base64编码后的数据,否则创建会报错 user: YWRtaW4= pass: MWYyZDFlMmU2N2Rm

  注:通过yaml创建Opaque类型的Secret值需要base64编码

  创建secret

kubectl create -f oldboyedu-secret.yml

  使用secret资源

  | 基于存储卷的方式挂载

kind: Pod apiVersion: v1 metadata: name: oldboyedu-linux-volume-secret labels: apps: myweb spec: 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: Pod apiVersion: v1 metadata: name: oldboyedu-linux-env-secret-demo labels: apps: myweb spec: 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/bash env | grep oldboyedu_linux

  subPath介绍

  | 什么是 subPath

  为了支持单一个pod多次使用同一个volume而设计,subpath翻译过来是子路径的意思,如果是数据卷挂载在容器,指的是存储卷目录的子路径,如果是配置项configMap/Secret,则指的是挂载在容器的子路径

  | subPath的使用方法

  subPath的使用方法一共有两种:

  同一个pod中多容器挂载同一个卷时提供隔离;

  将configMap和secret作为文件挂载到容器中而不覆盖挂载目录下的文件;

  | 同一个pod中多容器挂载同一个卷时提供隔离

kind: Pod apiVersion: v1 metadata: name: oldboyedu-linux-subpath labels: apps: myweb spec: 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"
  • Tag:

相关文章

最新评论