15.配置资源管理

news2024/12/23 9:55:10

文章目录

  • 配置资源管理
    • 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

在这里插入图片描述

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

kubectl get secrets secret-demo1 -o yaml

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

声明式创建

##先将值进行  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

在这里插入图片描述

存储卷挂载

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

在这里插入图片描述

变量引用

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

在这里插入图片描述

创建tls类型

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

在这里插入图片描述

创建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

在这里插入图片描述

###在网页中登陆到 harbor

http://192.168.242.67

用户:admin
密码:Harbor12345

##就可以看见页面

在这里插入图片描述

##推送镜像到  仓库中
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

在这里插入图片描述

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 --docker-email=admin@123.com

在这里插入图片描述

在这里插入图片描述

##创建 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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

挂载目录

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

在这里插入图片描述

##创建用于挂载的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

##修改里面的内容

在这里插入图片描述

在这里插入图片描述

挂载文件

##进入到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

在这里插入图片描述

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                      ##挂载的是文件时,要添加的东西

在这里插入图片描述

以环境变量引用

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

在这里插入图片描述

在这里插入图片描述

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

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

在这里插入图片描述

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

在这里插入图片描述

总结

  • 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"}]}}}}'

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

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

相关文章

项目实战 — 博客系统③ {功能实现}

目录 一、编写注册功能 &#x1f345; 1、使用ajax构造请求&#xff08;前端&#xff09; &#x1f345; 2、统一处理 &#x1f384; 统一对象处理 &#x1f384; 保底统一返回处理 &#x1f384; 统一异常处理 &#x1f345; 3、处理请求 二、编写登录功能 &#x1f345; …

Android 10.0 SystemServer进程读写sdcard权限的修改

1.前言 在10.0的系统开发中,在一些系统进程中,也就是在SystemServer的进程中,其中系统服务中会要求读写Sdcard的一些功能,然后 默认是没有读取sdcard权限的,而在app中可以申请sdcard读写权限在系统服务中就不能申请权限,接下来看怎么授权实现sdcard授权 如图: 2.Sy…

计算机网络(9) --- 数据链路层与MAC帧

计算机网络&#xff08;8&#xff09; --- IP与IP协议_哈里沃克的博客-CSDN博客IP与IP协议https://blog.csdn.net/m0_63488627/article/details/132155460?spm1001.2014.3001.5502 目录 1.MAC帧 1.MAC地址 2.MAC帧报头 3.资源碰撞 4.MTU 1.对IP协议的影响 2.对UDP协议…

【docker】基于dockerfile编写LNMP

目录 一、基础环境准备 二、部署nginx&#xff08;容器IP为172.18.0.10&#xff09; 1、整个Dockerfile文件内容 2、配置nginx.conf文件 3、构建镜像 ​编辑 三、部署mysql 1、整个Docker文件内容 2、准备my.conf文件 3、生成镜像 4、启动镜像容器 5、验证mysql 四、PH…

视频局部区域移动检测, 删除相似帧

视频局部区域移动检测, 删除相似帧 完整方案在本文最后, 不想听故事的直接跳转到完整方案即可 起因 老板的一个东西找不到了, 让查监控 场景 东西放在一个架子上, 由一个海康威视全天候录像的摄像头监控, 但是巧就巧在这个要找的东西被放在了摄像头的死角里, 正好被柜子的隔…

nginx crlf+xss漏洞组合拳

1.crlf漏洞概述 CRLF是指回车和换行符的组合&#xff0c;它们的十六进制编码分别为0x0d和0x0a。在HTTP协议中&#xff0c;HTTP头和HTTP正文之间使用两个CRLF来进行分隔。如果攻击者能够注入恶意的换行符&#xff0c;就能够向HTTP消息中插入恶意的代码或会话Cookie。CRLF漏洞通常…

Redis是如何保证高可用的?

Redis这种基于内存的关系型数据库我们在选用的时候就是考虑到它的快。而且可以很方便的实现诸如分布式锁、消息队列等功能。 笔者在前一段秋招面试的时候就被提问&#xff0c;“Redis是怎么保证高可用的&#xff1f;” 后续的子问题包含&#xff0c;集群模式是怎么实现的&…

HTTP连接管理

基础知识&#xff1a;非持久连接 HTTP初始时1.0版本在浏览器每一次向服务器请求完资源都会立即断开TCP连接&#xff0c;如果想要请求多个资源&#xff0c;就必须建立多个连接&#xff0c;这就导致了服务端和客户端维护连接的开销。 例如&#xff1a;一个网页中包含文字资源也包…

1、攻防世界第一天

1、网站目录下会有一个robots.txt文件&#xff0c;规定爬虫可以/不可以爬取的网站。 2、URL编码细则&#xff1a;URL栏中字符若出现非ASCII字符&#xff0c;则对其进行URL编码&#xff0c;浏览器将该请求发给服务端&#xff1b;服务端会可能会先对收到的url进行解码&#xff0…

完全二叉树O(1)插入

919. 完全二叉树插入器 - 力扣&#xff08;LeetCode&#xff09; 完全二叉树 是每一层&#xff08;除最后一层外&#xff09;都是完全填充&#xff08;即&#xff0c;节点数达到最大&#xff09;的&#xff0c;并且所有的节点都尽可能地集中在左侧。 设计一种算法&#xff0c…

日志系统——日志落地模块设计

一&#xff0c;大致框架 首先我们需要明确模块的功能&#xff0c;将格式化后的日志信息字符串&#xff0c;输出到对应的位置。同时由于用户输出信息的方式是多样的&#xff0c;因此我们日志落地模块也支持拓展的功能&#xff0c;也就是用户自定义落地方式。 日志信息落地的方式…

vite打包遇到的错误

1.js emit is not supported 2.将package.json中的bulid后面写成“vue-tsc --noEmit --skipLibCheck && vite build” 3.再次打包成功

设计模式——接口隔离原则

文章目录 基本介绍应用实例应传统方法的问题和使用接口隔离原则改进 基本介绍 客户端不应该依赖它不需要的接口&#xff0c;即一个类对另一个类的依赖应该建立在最小的接口上先看一张图: 类 A 通过接口 Interface1 依赖类 B&#xff0c;类 C 通过接口 Interface1 依赖类 D&…

四、性能监控工具nmon,severAgent

简单的性能监控工具 一、 性能监控概括二、 常用的性能监控工具1、nmon概况nmon有三种运行模式&#xff1a;nmon的使用 2、SeverAgent安装步骤集成jmeter注意点特点 一、 性能监控概括 性能测试工具&#xff1a; 用什么工具来做性能测试性能测试场景设计&#xff1a; 用什么方法…

VisualVM(All-in-One Java Troubleshooting Tool)多合-故障处理工具

VisualVM&#xff1a;多合-故障处理工具 VisualVM&#xff08;All-in-One Java Troubleshooting Tool&#xff09;是功能最强大的 运行监视 和 故障处理 程序之一&#xff0c;曾经在很长一段时间内是Oracle官方主力发展的虚拟机故障处理工具。Oracle曾在VisualVM的软件说明中写…

基于opencv的手势控制音量和ai换脸

基于opencv的手势控制音量和ai换脸 HandTrackingModule.py import cv2 import mediapipe as mp import timeclass handDetector():def __init__(self, mode False, maxHands 2, model_complexity 1, detectionCon 0.5, trackCon 0.5):self.mode modeself.maxHands max…

dockerfile编写LNMP

目录 1. 项目环境 2. 服务器环境 二、部署nginx&#xff08;容器IP为192.168.158.26&#xff09; 1、整个Dockerfile文件内容 ​编辑 2、配置nginx.conf文件 3、构建镜像 三、部署mysql 1、整个Docker文件内容 3、生成镜像 4、启动镜像容器 5、验证mysql 四、PHP部署 1…

初始web

华子目录 前后端与全栈BS架构网页开发原则前端三剑客初始htmlhtml的基本框架如何使用vscode创建网页网页基本框架html基本标签 前后端与全栈 前端:给用户看的内容 – 荧幕前&#xff08;负责显示&#xff09; 后端:在后台处理数据 – 荧幕后&#xff08;负责处理&#xff09; …

HTB-Gofer

HTB-Gofer 信息收集立足jhudson -> tbuckleyroot 信息收集 探索一阵子没有什么收获&#xff0c;去看看smb服务。 mail提到有一个proxy。 扫描子域找到proxy。 我们没有任何账号密码&#xff0c;试了常见的弱口令也没有任何效果。 要是我用POST会发生什么。 似乎不会发生什…

idea 新建servlet 访问提示404 WebServlet注解找不到包 报错

检查访问路径是否设置正确 如果设置为name “/testServlet”&#xff0c;则会404 WebServlet注解报错找不到包 检查是否引入了tomcat依赖包