K8s----资源管理

news2024/10/6 22:29:29

目录

一、Secret

1、创建 Secret

1.1 用kubectl create secret命令创建Secret

1.2 内容用 base64 编码,创建Secret

2、使用方式

2.1 将 Secret 挂载到 Volume 中,以 Volume 的形式挂载到 Pod 的某个目录下

2.2 将 Secret 导出到环境变量中

二、ConfigMap

1、创建 ConfigMap

1.1 使用目录创建

1.2 使用文件创建

1.3 使用字面值创建 

2、Pod 中使用 ConfigMap 

2.1 使用 ConfigMap 来替代环境变量

2.2  用 ConfigMap 设置命令行参数 

2.3 通过数据卷插件使用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 的认证信息。

Pod 需要先引用才能使用某个 secret,Pod 有 3 种方式来使用 secret:

  • 作为挂载到一个或多个容器上的卷中的文件。
  • 作为容器的环境变量。
  • 由 kubelet 在为 Pod 拉取镜像时使用。

应用场景:凭据

https://kubernetes.io/docs/concepts/configuration/secret/

1、创建 Secret

1.1 用kubectl create secret命令创建Secret

echo -n 'zhangsan' > username.txt
echo -n 'abc1234' > password.txt

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

#查看创建的secrets
kubectl get secrets

#查看详细信息
kubectl describe secret mysecret

1.2 内容用 base64 编码,创建Secret

echo -n zhangsan | base64
emhhbmdzYW4K=

echo -n abc1234 | base64
YWJjMTIzNAo==

vim secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: mysecret1
type: Opaque
data:
  username: emhhbmdzYW4K=
  password: YWJjMTIzNAo==

kubectl create -f secret.yaml 

kubectl get secrets

#查看secret详细信息
kubectl get secret mysecret1 -o yaml

2、使用方式

2.1 将 Secret 挂载到 Volume 中,以 Volume 的形式挂载到 Pod 的某个目录下

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

#创建
kubectl create -f secret-test.yaml

#查看
kubectl get pods

2.2 将 Secret 导出到环境变量中

apiVersion: v1
kind: Pod
metadata:
  name: mypod1
spec:
  containers:
  - name: nginx
    image: nginx
    env:
      - name: TEST_USER
        valueFrom:
          secretKeyRef:
            name: mysecret1
            key: username
      - name: TEST_PASSWORD
        valueFrom:
          secretKeyRef:
            name: mysecret1
            key: password

二、ConfigMap

与Secret类似,区别在于ConfigMap保存的是不需要加密配置的信息。

许多应用程序会从配置文件、命令行参数或环境变量中读取配置信息。ConfigMap API 给我们提供了向容器中注入配置信息的机制,ConfigMap 可以被用来保存单个属性,也可以用来保存整个配置文件或者JSON二进制大对象。

应用场景:应用配置

1、创建 ConfigMap

1.1 使用目录创建

mkdir /opt/configmap/
 
vim /opt/configmap/game.properties
enemies=aliens
lives=3
enemies.cheat=true
enemies.cheat.level=noGoodRotten
secret.code.passphrase=UUDDLRLRBABAS
secret.code.allowed=true
secret.code.lives=30
 
vim /opt/configmap/ui.properties
color.good=purple
color.bad=yellow
allow.textmode=true
how.nice.to.look=fairlyNice

ls /opt/configmap/
game.properties
ui.properties
kubectl create configmap game-config --from-file=/opt/configmap/
#--from-file 指定在目录下的所有文件都会被用在 ConfigMap 里面创建一个键值对,键的名字就是文件名,值就是文件的内容
kubectl get cm
NAME          DATA   AGE
game-config   2      10s

#查看详细信息
kubectl get cm game-config -o yaml

1.2 使用文件创建

只要指定为一个文件就可以从单个文件中创建 ConfigMap

##--from-file 这个参数可以使用多次,即可以使用两次分别指定上个实例中的那两个配置文件,效果就跟指定整个目录是一样的

kubectl create configmap game-config-2 --from-file=/opt/configmap/game.properties --from-file=/opt/configmap/ui.properties

kubectl get configmaps game-config-2 -o yaml

kubectl describe cm game-config-2

1.3 使用字面值创建 

##使用文字值创建,利用 --from-literal 参数传递配置信息,该参数可以使用多次,格式如下
kubectl create configmap special-config --from-literal=special.how=very --from-literal=special.type=good

kubectl get configmaps special-config -o yaml
apiVersion: v1
data:
  special.how: very					#key-value 结构
  special.type: good
kind: ConfigMap
metadata:
  creationTimestamp: 2021-05-25T06:59:37Z
  name: special-config
  namespace: default
  resourceVersion: "88610"
  selfLink: /api/v1/namespaces/default/configmaps/special-config
  uid: c4f45936-bd26-11eb-acba-000c29d88bba


kubectl delete cm --all
kubectl delete pod --all

2、Pod 中使用 ConfigMap 

2.1 使用 ConfigMap 来替代环境变量

vim env.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: special-config
  namespace: default
data:
  special.how: very
  special.type: good
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: env-config
  namespace: default
data:
  log_level: INFO


kubectl create -f env.yaml 

kubectl get cm
NAME             DATA   AGE
env-config       1      6s
special-config   2      6s

Pod的创建

vim test-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: test-pod
spec:
  containers:
  - name: busybox
    image: busybox:1.28.4
    command: [ "/bin/sh", "-c", "env" ]
    env:
      - name: SPECIAL_HOW_KEY
        valueFrom:
          configMapKeyRef:
            name: special-config
            key: special.how
      - name: SPECIAL_TYPE_KEY
        valueFrom:
          configMapKeyRef:
            name: special-config
            key: special.type
    envFrom:
      - configMapRef:
          name: env-config
  restartPolicy: Never


kubectl create -f test-pod.yaml

kubectl get pods
NAME         READY   STATUS      RESTARTS   AGE
pod-test     0/1     Completed   0          33s
kubectl logs pod-test
KUBERNETES_SERVICE_PORT=443
KUBERNETES_PORT=tcp://10.0.0.1:443
HOSTNAME=pod-test
SHLVL=1
SPECIAL_HOW_KEY=very			#赋值变量 SPECIAL_HOW_KEY 的值为 special-config 的 special.how: very
HOME=/root
SPECIAL_TYPE_KEY=good			#赋值变量 SPECIAL_TYPE_KEY 的值为 special-config 的 special.type: good
KUBERNETES_PORT_443_TCP_ADDR=10.0.0.1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_PROTO=tcp
log_level=INFO					#引入 env-config 的变量 log_level: INFO
KUBERNETES_PORT_443_TCP=tcp://10.0.0.1:443
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_SERVICE_HOST=10.0.0.1
PWD=/

2.2  用 ConfigMap 设置命令行参数 

vim test-pod2.yaml
apiVersion: v1
kind: Pod
metadata:
  name: test-pod2
spec:
  containers:
  - name: busybox
    image: busybox:1.28.4
    command: 
	- /bin/sh
	- -c
	- echo "$(SPECIAL_HOW_KEY) $(SPECIAL_TYPE_KEY)"
    env:
      - name: SPECIAL_HOW_KEY
        valueFrom:
          configMapKeyRef:
            name: special-config
            key: special.how
      - name: SPECIAL_TYPE_KEY
        valueFrom:
          configMapKeyRef:
            name: special-config
            key: special.type
    envFrom:
      - configMapRef:
          name: env-config
  restartPolicy: Never


kubectl create -f test-pod2.yaml

kubectl get pods
NAME        READY   STATUS      RESTARTS   AGE
test-pod2   0/1     Completed   0          34s

kubectl logs test-pod2
very good

2.3 通过数据卷插件使用ConfigMap 

在数据卷里面使用 ConfigMap,就是将文件填入数据卷,在这个文件中,键就是文件名,键值就是文件内容

vim test-pod3.yaml
apiVersion: v1
kind: Pod
metadata:
  name: test-pod3
spec:
  containers:
  - name: busybox
    image: busybox:1.28.4
    command: [ "/bin/sh", "-c", "sleep 36000" ]
    volumeMounts:
    - name: config-volume
      mountPath: /etc/config
  volumes:
    - name: config-volume
      configMap:
        name: special-config
  restartPolicy: Never


kubectl create -f test-pod3.yaml 

kubectl get pods
NAME        READY   STATUS      RESTARTS   AGE
test-pod3   1/1     Running     0          5s

kubectl exec -it test-pod3 sh
 # cd /etc/config/
 # ls
special.how   special.type
 # vi special.how 
 # vi special.type 

//ConfigMap 的热更新 

vim test-pod4.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: log-config
  namespace: default
data:
  log_level: INFO
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: my-nginx
spec:
  replicas: 1
  template:
    metadata:
      labels:
        run: my-nginx
    spec:
      containers:
      - name: my-nginx
        image: nginx
        ports:
        - containerPort: 80
        volumeMounts:
        - name: config-volume
          mountPath: /etc/config
      volumes:
        - name: config-volume
          configMap:
            name: log-config


kubectl apply -f test-pod5.yaml

kubectl get pods 
NAME                        READY   STATUS    RESTARTS   AGE
my-nginx-76b6489f44-6dwxh   1/1     Running   0          46s

kubectl exec -it my-nginx-76b6489f44-6dwxh -- cat /etc/config/log_level
INFO

kubectl edit configmap log-config
apiVersion: v1
data:
  log_level: DEBUG		#INFO 修改成 DEBUG
kind: ConfigMap
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","data":{"log_level":"DEBUG"},"kind":"ConfigMap","metadata":{"annotations":{},"name":"log-config","namespace":"default"}}			#INFO 修改成 DEBUG
  creationTimestamp: 2021-05-25T07:59:18Z
  name: log-config
  namespace: default
  resourceVersion: "93616"
  selfLink: /api/v1/namespaces/default/configmaps/log-config
  uid: 1b8115de-bd2f-11eb-acba-000c29d88bba

//等大概10秒左右,使用该 ConfigMap 挂载的 Volume 中的数据同步更新 

kubectl exec -it my-nginx-76b6489f44-6dwxh -- cat /etc/config/log_level
DEBUG

//ConfigMap 更新后滚动更新 Pod
更新 ConfigMap 目前并不会触发相关 Pod 的滚动更新,可以通过在 .spec.template.metadata.annotations 中添加 version/config ,每次通过修改 version/config 来触发滚动更新

kubectl patch deployment my-nginx --patch '{"spec": {"template": {"metadata": {"annotations": {"version/config": "20210525" }}}}}'

kubectl get pods 
NAME                        READY   STATUS              RESTARTS   AGE
my-nginx-665dd4dc8c-j4k9t   0/1     ContainerCreating   0          4s
my-nginx-76b6489f44-6dwxh   0/1     Terminating         0          10m

kubectl get pods 
NAME                        READY   STATUS    RESTARTS   AGE
my-nginx-665dd4dc8c-j4k9t   1/1     Running   0          74s

PS:更新 ConfigMap 后:
●使用该 ConfigMap 挂载的 Env 不会同步更新。
●使用该 ConfigMap 挂载的 Volume 中的数据需要一段时间(实测大概10秒)才能同步更新。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1188909.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大数据之LibrA数据库系统告警处理(ALM-12033 慢盘故障)

告警解释 系统每一秒执行一次iostat命令,监控磁盘I/O的系统指标,如果在60s内,svctm大于100ms的周期数大于30次则认为磁盘有问题,产生该告警。 更换磁盘后,告警自动恢复。 告警属性 告警ID 告警级别 可自动清除 1…

99% 用户都不知道的 Power BI / Power Query 隐藏功能

Power Query 有一个被糟糕的翻译耽误了的宝藏功能,我估计绝大多数的用户都没发现。 在 Power Query —— 视图 —— 数据预览 下,有几个奇怪的选项 “列分发”、“列配置文件”、“列质量”,从名字根本看不出来是做什么的! 看英文…

sm2加密算法

sm2是一种非对称加密算法。在非对称加密中,加密和解密使用的是不同的密钥对,分别是公钥和私钥。SM2算法是由中国国家密码管理局制定的一种椭圆曲线非对称加密算法,用于数字签名、密钥协商等安全通信场景。 这里使用hutool工具类 Hutool 支持对…

element-ui中el-table数据合并行和列,应该怎么解决

最近接到一个任务,要实现一个数据报表,涉及到很多合并问题,一开始想着原生会简单点,实际上很麻烦,最后还是用elemen-ui中table自带的合并方法. 最终的效果是要做成这种:1.数据处理,后端返回来的数据是,一个大对象,包含三个数组,既然合并,肯定是要处理成一个数组,并且要把相同的…

AI创作系统ChatGPT网站源码+AI绘画网站源码+支持GPT4.0+支持OpenAI GPT全模型+国内AI全模型

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…

带头+双向+循环链表

前言: 前面我们已经学习了单链表的结构及其功能特点,也了解了单链表在实现一些功能时出现的一些缺点,比如在删除某个节点前面一个节点时就需要再开一个变量来存放前面一个节点的信息,这样就显得不灵活,为了使链表实现功…

Kubernetes 问题排查全景图

伴随着混沌的微服务架构,多语言和多网络协议混杂。以及下沉的基础设施能力屏蔽实现细节,问题定界越发困难。 企业急需一种支持多语言,多通信协议的技术,并在产品层面尽可能覆盖软件栈端到端的可观测性需求。 「Kubernetes 问题排查…

小时候画在手腕上的表,我用全志R128让他真正动了起来

小时候,我们总是充满想象力和创造力。 在那个年龄,我们没有真正的手表,但我们总是喜欢在纸上画出自己的手表,仿佛它真的能告诉我们时间。 为了弥补童年的遗憾,作者找到了一个智能手表的开源项目——NWatch&#xff0c…

计算机中丢失vcomp140.dll解决办法,可以使用这个4个方法解决问题

一、vcomp140.dll文件丢失的原因 未正确安装Visual C Redistributable:vcomp140.dll是Visual C Redistributable for Visual Studio 2015的一部分,当我们安装某些软件或游戏时,可能需要这个库。如果未正确安装这个库,可能导致vco…

c#装饰器模式详解

基础介绍: 动态地给一个对象添加一些额外的职责。适用于需要扩展一个类的功能,或给一个类添加多个变化的情况。 装饰器,顾名思义就是在原有基础上添加一些功能。 大家都只知道如果想单纯的给原有类增加一些功能,可以直接继续该类生…

数据结构: unordered_map与unordered_set

目录 1.框架 2.结构 unordered_map unordered_set 3.对HashTable的修改 更改模板参数 4.增加迭代器 a.结构 b.运算符重载 c.HashTable封装迭代器 d.unordered_map与unordered_set的迭代器 1.框架 1.复用HashTable ~~> 增加模板参数KeyOfT 来获取 Key值 unorder…

基于springboot实现致远汽车租赁平台管理系统项目【项目源码+论文说明】

基于springboot实现致远汽车租赁平台系统演示 摘要 首先,论文一开始便是清楚的论述了系统的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求。然后在明白了系统的需求基础上需要进一步地设计系统,主要…

怎么批量获取文件名,并保存到excel?

怎么批量获取文件名?什么叫批量获取文件名,其实也非常好理解,就是面对大量文件是可以一次性的获取所有文件名称,这项技术的应用也是非常常见的,为什么这么说呢?现在很多的文档管理人员或者公司的文员&#…

【AICFD案例教程】汽车外气动-AI加速

AICFD是由天洑软件自主研发的通用智能热流体仿真软件,用于高效解决能源动力、船舶海洋、电子设备和车辆运载等领域复杂的流动和传热问题。软件涵盖了从建模、仿真到结果处理完整仿真分析流程,帮助工业企业建立设计、仿真和优化相结合的一体化流程&#x…

进入网络安全行业有哪些大公司推荐

随着互联网的普及和数字化进程的加速,网络安全问题日益凸显。从个人信息的泄露到国家基础设施的被攻击,网络安全已经不再只是一个技术问题,而是关乎到每个人、每个企业和国家的核心利益。在这场没有硝烟的战争中,一些大公司凭借其…

linux基础指令【上篇】

📙 作者简介 :RO-BERRY 📗 学习方向:致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 📒 日后方向 : 偏向于CPP开发以及大数据方向,欢迎各位关注,谢谢各位的支持 引用 01. ls 指令2. pwd命…

IntelliJ Idea 撤回git已经push的操作

最初的样子 现在的样子 解决方案 第一步,commit到本地撤回: 打开提交历史记录,选中回退的版本右键,点击“Reset Current Branch to Here…”,然后选中“Mixed”,点击Reset后,之前commit的代码会在本地显…

定位咨询的价值:企业在市场中如何立足并打造竞争优势?

在激烈的市场竞争中,定位咨询服务显得尤为关键,它既能帮助企业发掘内在优势,又能塑造独特的市场地位,并指导如何持续巩固这一市场地位。 何为定位咨询? 定位咨询,即市场定位咨询,是指咨询公司帮助客户在…

彻底解决Win11锁屏界面黑屏或者图片不变化

问题描述 今天不知道干了啥,一顿操作后,win11的锁屏界面的图片就变成固定的了,原来是有windows聚焦的图片在自动变化的效果,现在没有了。然后就各种搜索求助,第二顿操作之后,锁屏界面彻底变成了黑色&#…

Python从入门到进阶

Python基础入门----Python简介 Python基础入门----安装Python环境(Windows、MacOS、CentOS、Ubuntu) Python基础入门----Python基础语法:解释器、标识符、关键字、缩进 Python基础入门----Python基本数据类型:数字、字符串、列…