当前位置: 首页 > news >正文

kubernetes配置资源管理

目录

  • 一、Secret
    • 1.1 Secret 四种类型
    • 1.2 Secret 使用条件
  • 二、Secret 使用方式
    • 2.1 基于Opaque创建 Secret
    • 2.2 内容用 base64 编码,创建Secret
    • 2.3 将 Secret 挂载到 Volume 中,以 Volume 的形式挂载到 Pod 的某个目录下
    • 2.4 将 Secret 导出到环境变量中
    • 2.5 使用secret配置免密交互拉取habor私有仓库镜像
  • 三、ConfigMap
    • 3.1 使用目录创建
    • 3.2 通过键值对创建
    • 3.3 通过挂载的方式使用
    • 3.4 通过环境变量的方式使用
    • 3.5 在容器启动时直接引用变量值
    • 3.6 将现有nginx配置文件替换掉容器里默认nginx配置文件
    • 3.7 ConfigMap 热更新
    • 3.8 ConfigMap 动态更新
    • 3.9 滚动更新


一、Secret

Secret 是用来保存密码、token、密钥等敏感数据的 k8s 资源,这类数据虽然也可以存放在 Pod 或者镜像中,但是放在 Secret 中是为了更方便的控制如何使用数据,并减少暴露的风险。

1.1 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 证书和私钥信息。

1.2 Secret 使用条件

Pod 需要先引用才能使用某个 secret,Pod 有 3 种方式来使用 secret:
● 作为挂载到一个或多个容器上的卷 中的文件。
● 作为容器的环境变量。
● 由 kubelet 在为 Pod 拉取镜像时使用。

应用场景:凭据
https://kubernetes.io/docs/concepts/configuration/secret/

二、Secret 使用方式

2.1 基于Opaque创建 Secret

kubectl create secret generic -h 
#用kubectl create secret命令创建Secret
echo -n 'zhangsan' > username.txt
echo -n 'abc1234' > password.txtkubectl create secret generic mysecret --from-file=username.txt --from-file=password.txtkubectl get secretskubectl describe secret mysecret
#get或describe指令都不会展示secret的实际内容,这是出于对数据的保护的考虑

在这里插入图片描述

2.2 内容用 base64 编码,创建Secret

echo -n zhangsan | base64
emhhbmdzYW4=
echo -n abc1234 | base64
YWJjMTIzNA==vim secret.yaml
apiVersion: v1
kind: Secret
metadata:name: mysecret1
type: Opaque
data:username: emhhbmdzYW4=password: YWJjMTIzNA==

在这里插入图片描述
在这里插入图片描述

kubectl create -f secret.yaml 
kubectl get secrets
kubectl get secret mysecret1 -o yaml

在这里插入图片描述

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

//master01节点
//创建一个自主式Pod
cd /opt/secret
kubectl run myapp --image=soscscs/myapp:v1 --port=80 --dry-run=client -oyaml > myapp.yaml
cp myapp.yaml myapp-demo1.yaml
vim myapp-demo1.yamlapiVersion: v1
kind: Pod
metadata:labels:run: myapp-demo1name: myapp-demo1
spec:volumes:- name: vol-harborsecret:secretName: mysecret1   containers:- image: soscscs/myapp:v1name: myapp-demo1ports:- containerPort: 80volumeMounts:- name: vol-harbormountPath: /opt/secretreadOnly: truekubectl apply -f myapp-demo1.yaml
kubectl get pods -owide
kubectl exec -it myapp-demo1 sh

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/3d47b3b131164ae4baa4d3a68dc987d1.png

在这里插入图片描述
在这里插入图片描述

2.4 将 Secret 导出到环境变量中

//再用 base64 编码,创建一个Secret mysecret2.yaml
vim mysecret-demo2.yaml
apiVersion: v1
kind: Pod
metadata:labels:run: myapp-demo2name: myapp-demo2
spec:containers:- image: soscscs/myapp:v1name: myapp-demo2ports:- containerPort: 80env:- name: mysecret1_USERvalueFrom:secretKeyRef:name: mysecret1key: username- name: mysecret2_PASSWORDvalueFrom:secretKeyRef:name: mysecret2key: passwordenvFrom:- secretRef:name: mysecret1

在这里插入图片描述
在这里插入图片描述

2.5 使用secret配置免密交互拉取habor私有仓库镜像

使用secret配置免密交互拉取habor私有仓库镜像 , 在搭建好docker的私有仓库后,在使用私有仓库时需要通过docker login指令来登录到私有仓库中。但同时在使用的过程中也会把habor仓库的用户名和密码暴露在命令行中,存在一定的安全隐患。k8s中的secret配置的运用能够实现并且规避这一问题的存在

//另外准备两台安装docker引擎和docker-compose的服务器
//部署 docker引擎 
yum install -y yum-utils device-mapper-persistent-data lvm2 
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repoyum install -y docker-ce docker-ce-cli containerd.iocd /etc/docker/
cat  > /etc/docker/daemon.json <<EOF
{"registry-mirrors": ["https://6iuzoxz4.mirror.aliyuncs.com","https://dockerhub.icu","https://docker.chenby.cn","https://docker.1panel.live","https://docker.awsl9527.cn","https://docker.anyhub.us.kg","https://dhub.kubesre.xyz"],"exec-opts": ["native.cgroupdriver=systemd"],"log-driver": "json-file","log-opts": {"max-size": "500m","max-file": "3"}
}
EOFsystemctl start docker.service
systemctl enable docker.service 上传docker-compose
mv docker-compose /usr/local/bin/
chmod +x !$/docker-compose
docker-compose -version

在这里插入图片描述

//在其中一台装docker引擎和docker-compose的服务器安装harbor
//上传harbor-offline-installer-v1.10.18.tgz 
//下载运行registry镜像 
docker pull registry
vim /etc/docker/daemon.json
......
"insecure-registries": ["http://192.168.154.13"],
......cd /opt
tar xf harbor-offline-installer-v1.10.18.tgz
cd harbor/
vim harbor.yml 

在这里插入图片描述

在这里插入图片描述

//master01节点
kubectl create secret docker-registry myharbor --docker-server=192.168.154.13 --docker-username=admin --docker-password=Harbor12345 --docker-email=admin@harbor.comdocker-registry   —— secret资源类型
myharbor          —— secret资源名称
--docker-server=192.168.154.13   —— 私有仓库IP地址
--docker-username=admin          —— 私有仓库登录账号
--docker-password=Harbor12345    —— 私有仓库登录密码
--docker-email=admin@harbor.com  —— 私有仓库登录邮箱kubectl get secrets

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/fcbc06bdd1324494ade51546f9d35c2f.png

//harbor服务器加载镜像和启动 Harbor
./prepare
./install.sh docker-compose psdocker pull nginx:1.20

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

打开浏览器输入账户密码即可登录
在这里插入图片描述

新建一个项目
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

//上传nginx镜像到私有仓库
docker login -u admin -p Harbor12345 http://192.168.154.13
docker images

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

nginx镜像就推送上去了
在这里插入图片描述

从私有仓库拉取镜像

先删除集群所有节点的nginx镜像
docker rmi -f nginx:latest

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

//master01
cd /opt/secret
vim myapp-demo3.yamlapiVersion: v1
kind: Pod
metadata:labels:run: nginxname: nginx
spec:containers:- image: 192.168.154.13/k8s/nginx:1.20name: nginxports:- containerPort: 80

在这里插入图片描述

在这里插入图片描述
这时执行pod是报错的
在这里插入图片描述
在这里插入图片描述

//先在所有node节点上把私有仓库ip加上
vim /etc/docker/daemon.json
"insecure-registries": ["http://192.168.154.13"],
//再保存重启docker服务
systemctl restart docker.service

在这里插入图片描述

//master01 
cd /opt/secret
vim myapp-demo3.yamlapiVersion: v1
kind: Pod
metadata:labels:run: nginxname: nginx
spec:containers:- image: 192.168.154.13/k8s/nginx:1.20name: nginxports:- containerPort: 80imagePullSecrets:- name: myharbor

在这里插入图片描述

在这里插入图片描述

通过私有仓库拉取镜像成功

在这里插入图片描述

日志上也看到拉取镜像了

在这里插入图片描述

三、ConfigMap

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

3.1 使用目录创建

//创建 ConfigMapmkdir /opt/configmap/vim /opt/configmap/game.config
enemy.types=aliens,monsters
player.maximum-lives=5 vim /opt/configmap/ui.config
color.good=purple
color.bad=yellow
allow.textmode=truels /opt/configmap/
game.config
ui.configkubectl create configmap game-config --from-file=/opt/configmap/
//--from-file 指定在目录下的所有文件都会被用在 ConfigMap 里面创建一个键值对,键的名字就是文件名,值就是文件的内容kubectl get cm

在这里插入图片描述
在这里插入图片描述

mkdir /opt/configmap/cm
cd  /opt/configmap/cm
cp -r /etc/passwd /etc/shadow /etc/yum.repos.d/ /etc/yum.conf /etc/fstab /etc/hosts ./
kubectl create cm cm-demo1 --from-file=/opt/configmap/cm
kubectl describe cm cm-demo1

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

ConfigMap 只加载第一层目录的第一层文件,子目录和其下文件都不会加载出来
而且 ConfigMap 的键值是以明文的方式展示出来,这也是和 secret 的区别之一

3.2 通过键值对创建

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

kubectl create cm mycm-demo1 --from-literal=class=demo1 --from-literal=name=test
kubectl get cm
kubectl describe cm mycm-demo1

在这里插入图片描述
在这里插入图片描述

3.3 通过挂载的方式使用

cd /opt/secret/
vim myapp-demo4.yamlapiVersion: v1
kind: Pod
metadata:labels:run: myapp-demo4name: myapp-demo4
spec:volumes:- name: vol-cmconfigMap:name: cm-demo1containers:- image: soscscs/myapp:v1name: myapp-demo4ports:- containerPort: 80volumeMounts:- name: vol-cmmountPath: /opt/ConfigMapreadOnly: true

在这里插入图片描述

在这里插入图片描述

3.4 通过环境变量的方式使用

cd /opt/secret
cp myapp-demo2.yaml myapp-demo5.yaml
vim myapp-demo5.yaml
apiVersion: v1
kind: Pod
metadata:labels:run: myapp-demo5name: myapp-demo5
spec:containers:- image: soscscs/myapp:v1name: myapp-demo5ports:- containerPort: 80env:- name: ConfigMap_USERvalueFrom:configMapKeyRef:name: mycm-demo1key: name- name: MYCLASSvalueFrom:configMapKeyRef:name: mycm-demo1key: classenvFrom:- configMapRef:name: mycm-demo1

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.5 在容器启动时直接引用变量值

vim myapp-demo5.yamlapiVersion: v1
kind: Pod
metadata:labels:run: myapp-demo6name: myapp-demo6
spec:containers:- image: busybox:1.28name: myapp-demo6command:- /bin/sh- -c- echo "${ConfigMap_USER} is in ${MYCLASS}" > /var/env.txt ;sleep 3600ports:- containerPort: 80env:- name: ConfigMap_USERvalueFrom:configMapKeyRef:name: mycm-demo1key: name- name: MYCLASSvalueFrom:configMapKeyRef:name: mycm-demo1key: classenvFrom:- configMapRef:name: mycm-demo1

在这里插入图片描述

在这里插入图片描述

3.6 将现有nginx配置文件替换掉容器里默认nginx配置文件

cd /opt/secret
vim myapp-demo6.yaml
apiVersion: v1
kind: Pod
metadata:labels:run: cm-demo6name: cm-demo6
spec:containers:- image: soscscs/myapp:v1name: cm-demo6ports:- containerPort: 80dnsPolicy: ClusterFirstrestartPolicy: Always

在这里插入图片描述

在这里插入图片描述

//准备开始替换
//上传nginx.conf
cd /opt/secret
kubectl create configmap mycm-nginx --from-file=./nginx.conf
vim nginx.conf
#user  nobody;
worker_processes  1;#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;#pid        logs/nginx.pid;events {worker_connections  1024;
}http {include       mime.types;default_type  application/octet-stream;#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '#                  '$status $body_bytes_sent "$http_referer" '#                  '"$http_user_agent" "$http_x_forwarded_for"';#access_log  logs/access.log  main;sendfile        on;#tcp_nopush     on;#keepalive_timeout  0;keepalive_timeout  65;#gzip  on;server {listen       80;server_name  localhost;charset utf-8;#access_log  logs/host.access.log  main;location / {root   html;index  index.html index.php;}#error_page  404              /404.html;# redirect server error pages to the static page /50x.html#error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}# proxy the PHP scripts to Apache listening on 127.0.0.1:80##location ~ \.php$ {#    proxy_pass   http://127.0.0.1;#}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000#location ~ \.php$ {root           html;fastcgi_pass   172.18.0.30:9000;fastcgi_index  index.php;fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$fastcgi_script_name;include        fastcgi_params;}# deny access to .htaccess files, if Apache's document root# concurs with nginx's one##location ~ /\.ht {#    deny  all;#}}# another virtual host using mix of IP-, name-, and port-based configuration##server {#    listen       8000;#    listen       somename:8080;#    server_name  somename  alias  another.alias;#    location / {#        root   html;#        index  index.html index.htm;#    }#}# HTTPS server##server {#    listen       443 ssl;#    server_name  localhost;#    ssl_certificate      cert.pem;#    ssl_certificate_key  cert.key;#    ssl_session_cache    shared:SSL:1m;#    ssl_session_timeout  5m;#    ssl_ciphers  HIGH:!aNULL:!MD5;#    ssl_prefer_server_ciphers  on;#    location / {#        root   html;#        index  index.html index.htm;#    }#}}

在这里插入图片描述
在这里插入图片描述

错误示例:
vim cm-nginx.yaml
apiVersion: v1
kind: Pod
metadata:labels:run: cm-demo6name: cm-demo6
spec:volumes:- name: nginx-confconfigMap:name: mycm-nginxcontainers:- image: soscscs/myapp:v1name: cm-demo6ports:- containerPort: 80volumeMounts:- name: nginx-confmountPath: /etc/nginx/nginx.confreadOnly: true

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

vim cm-nginx.yaml
apiVersion: v1
kind: Pod
metadata:labels:run: cm-demo6name: cm-demo6
spec:volumes:- name: nginx-confconfigMap:name: mycm-nginxcontainers:- image: soscscs/myapp:v1name: cm-demo6ports:- containerPort: 80volumeMounts:- name: nginx-confmountPath: /etc/nginx/nginx.confsubPath: nginx.confreadOnly: true

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3.7 ConfigMap 热更新

想修改 nginx.conf 里的某个参数值,不要在容器里的 nginx.conf 里修改,不然需要重启服务,容器也会宕掉。

  • 只支持以目录的方式挂载的cm卷进行热更新
  • 不支持以文件的方式挂载的cm卷进行热更新
//以目录的方式更新
cd /opt/secret
cp nginx.conf nginx2.conf
vim nginx2.confserver {location / {root /var/www/html;index index.html;}location ~ \.php$ {root           html;fastcgi_pass   172.18.0.30:9000;fastcgi_index  index.php;fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$fastcgi_script_name;include        fastcgi_params;}
}kubectl create cm mycm-nginx2 --from-file=./nginx2.conf

在这里插入图片描述

vim cm-demo.yaml
apiVersion: v1
kind: Pod
metadata:labels:run: cm-demoname: cm-demo
spec:volumes:- name: nginx-confconfigMap:name: mycm-nginx2containers:- image: soscscs/myapp:v1name: cm-demoports:- containerPort: 80volumeMounts:- name: nginx-confmountPath: /etc/nginx/conf.dreadOnly: truekubectl apply -f cm-demo.yamlkubectl exec -it cm-demo sh

在这里插入图片描述

3.8 ConfigMap 动态更新

kubectl edit cm mycm-nginx2

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3.9 滚动更新

陈述式管理资源配置的方式 修改或添加 资源对象的配置

kubectl patch 资源类型 资源名 --patch '{"第一层字段": {"第一层字段": ...}}'

kubectl create deployment myapp-deploy --image=soscscs/myapp:v1 --port=80 --replicas=2

在这里插入图片描述

//修改副本集并使用打补丁的方式修改
kubectl edit deployments.apps myapp-deploy
kubectl patch deployments.apps myapp-deploy --patch '{"spec":{"replicas":4}}'

在这里插入图片描述

在这里插入图片描述

//打补丁的方式添加字段
kubectl patch deployments.apps myapp-deploy --patch '{"spec":{"template":{"metadata":{"annotations":{"version/config":"2024v1"}}}}}'

在这里插入图片描述

//打补丁的方式修改镜像
kubectl patch deployments.apps myapp-deploy --patch '{"spec":{"template":{"spec":{"containers":[{"name":"myapp","image":"soscscs/myapp:v3"}]}}}}'

在这里插入图片描述

相关文章:

  • Python 从入门到实战31(数据库编程接口)
  • 【个人笔记】数据一致性的解决方案
  • MySQL-数据库约束
  • 翻译:Recent Event Camera Innovations: A Survey
  • Anki 学习日记 - 卡片模版 - 单选ABCD(纯操作)
  • 《Linux运维总结:使用 MongoDB工具备份和恢复mongodb 7.0.14分片集群(方案一)》
  • yolov8环境安装
  • GPT+AI技术实战:构建多端智能虚拟数字人的创新与突破
  • WebRTC中的维纳滤波器实现详解:基于决策导向的SNR估计
  • 0基础学习CSS(六)字体
  • C++中的lower_bound函数详解
  • 孙论文——定标
  • 牛顿迭代法求解x 的平方根
  • lombok详细教程(详解)
  • windows系统中后台运行java程序
  • AHK 中 = 和 == 等比较运算符的用法
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • conda常用的命令
  • es6要点
  • Koa2 之文件上传下载
  • Mysql优化
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • Tornado学习笔记(1)
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 构建二叉树进行数值数组的去重及优化
  • 关于extract.autodesk.io的一些说明
  • 来,膜拜下android roadmap,强大的执行力
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 我是如何设计 Upload 上传组件的
  • 一起参Ember.js讨论、问答社区。
  • 交换综合实验一
  • ​Java基础复习笔记 第16章:网络编程
  • ​水经微图Web1.5.0版即将上线
  • # 数论-逆元
  • #pragma data_seg 共享数据区(转)
  • #pragma once与条件编译
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (2)MFC+openGL单文档框架glFrame
  • (2024最新)CentOS 7上在线安装MySQL 5.7|喂饭级教程
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (poj1.3.2)1791(构造法模拟)
  • (备份) esp32 GPIO
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (动态规划)5. 最长回文子串 java解决
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (算法)求1到1亿间的质数或素数
  • (微服务实战)预付卡平台支付交易系统卡充值业务流程设计
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • (转)甲方乙方——赵民谈找工作
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • @vue/cli脚手架