kubernetes集群常用资源(二)!
上一篇文章为大家介绍了关于微服务的集群基础知识,其中包含简介、常用特性、资源优势以及实操案例等,集群本篇文章带大家学习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: myregistrysecret资源创建
| 方式一: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_linuxsubPath介绍
| 什么是 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"相关文章
电脑时钟错误导致无法上网的解决方法(解决电脑时钟错误,顺利上网畅享互联网世界)
摘要:电脑时钟是我们在日常使用中经常忽略的一个细节,然而它对于我们正常上网却有着重要的作用。当电脑时钟错误时,会导致一系列问题,包括无法访问互联网。本文将介绍电脑时钟错误所带来的影响,并...2025-11-04- 查看系统的sqlte3的版本?2025-11-04
大家好,我是悟空呀。上次我们深入讲解了 Ribbon 的架构原理,这次我们再来看下 Feign 远程调用的架构原理。一、理解远程调用远程调用怎么理解呢?远程调用和本地调用是相对的,那我们先说本地调用更2025-11-04Sql Server中通过sql命令获取cpu占用及产生锁的sql
获取SQLSERVER中产生锁的SQL语句?2025-11-04如何扩大老式电脑的内存容量?(简单易懂的教程,让你的老电脑焕发新生!)
摘要:随着科技的不断进步,老式电脑的内存容量往往无法满足我们现在的需求。然而,如果你手头还有一台老电脑,你并不需要立即购买一台新的。本文将为你提供一份简单易懂的教程,帮助你扩大老式电脑的...2025-11-04- 域名注册是建立网站和在线品牌的关键步骤,它相当于互联网上的一个地址,让用户能够方便地找到并访问企业或个人的网站。然而,域名注册并非随意进行,它需要满足一定的条件和遵循特定的流程。以下是关于域名注册所需2025-11-04

最新评论