[单master节点部署]14.deamonSet和配置管理中心

news2024/12/23 9:48:36
Deamonset

deamonSet可以保证集群的每一个物理节点上都可以运行某些服务的一个pod,就是说集群增加一个node,他自动在这个node上部署该服务。这适合监控、日志收集等服务。

部署deamonset:

apiVsersion: apps/v1
kind: DeamonSet
metadata:
  name: deamonset1
  namespace: kube-system
spec:
  selector:
    matchLabels:
      app: fluentd-elasticsearch
 template: 
   metadata:
     name: fluentd-elasticsearch
     labels:
       app: fluentd-elasticsearch
   spec:
     containers:
     - name: fluentd-elasticsearch
       image: xianchao/fluentd:v2.5.1
       imagePullPolicy: IfNotPresent
       resources:
         limits:
           cpu: 100m
           memory: 200Mi
         requests:
           cpu: 100m
           memory: 200Mi
       volumeMounts:
       - name: varlog
         mountPath: /var/log
       - name: varlibdockercontainers
         mountPath: /var/lib/docker/containers
         readOnly: true
       terminationGracePeriodSeconds: 30
  volumes:
  - name: varlog
    hostPath:
      path: /var/log
  - name: varlibdockercontainers
    hostPath:
      path: /var/lib/docker/containers
  toletations:
  - key: node-role.kubernetes.io/master
    effect: NoSchedule

然后会在每一个节点上部署一个pod,包括master节点(因为设置了toleration)。

deamonset保证一个node上只有一个pod,所以它的更新策略是,先停掉原本的pod,然后再启动新的pod。

configMap

configmap用于保存非机密性的配置,从而让相同的镜像可以部署在不同的运行环境中。

k8s通过configMap实现了配置和镜像的分离,从而减少镜像的大小,增强镜像的可移植性和可复制性,而且方便配置的管理。configMap可以做成volume卷,pod启动后就会自动挂载到容器里面,对代码没有侵入。

在微服务架构中,存在多个服务共享配置的情况,这种情况每个服务单独配置就很麻烦,如果通过configmap就可以友好的进行配置共享。

创建configMap

1.通过命令行创建configMap,其中的标签有--from-literal

kubectl create configmap tomcat-config --from-literal=tomcat_port=80 --from-literal=server_name=myapp.tomcat.com
configmap/tomcat-config created
[root@master yam_files]# kubectl get configmap
NAME               DATA   AGE
kube-root-ca.crt   1      15d
tomcat-config      2      13s
[root@master yam_files]# kubectl describe configmap tomcat-config
Name:         tomcat-config
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
server_name:
----
myapp.tomcat.com
tomcat_port:
----
8080
BinaryData
====
Events:  <none>

2.通过编写文件来创建configMap,标签有from-file,其中规定了这个configmap的名字叫做www

[root@master configmap]# cat nginx.conf 
server {
  server_name www.nginx.com;
  listen 80;
  root /home/nginx/www
}
[root@master configmap]# kubectl create configmap www-nginx --from-file=www=./nginx.conf 

查看config文件,这个配置的key为www

[root@master configmap]# kubectl describe configmap www-nginx
Name:         www-nginx
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
www:
----
server {
  server_name www.nginx.com;
  listen 80;
  root /home/nginx/www
}
BinaryData
====
Events:  <none>

3.通过指定文件路径来创建configMap

[root@master aa]# cat my_server.cnf 
server_id =1
[root@master aa]# cat my_slave.cnf 
server_id =2
[root@master configmap]# kubectl create configmap server-config --from-file=./aa
configmap/server-config created
[root@master configmap]# kubectl describe cm server-config
Name:         server-config
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
my_server.cnf:
----
server_id =1

my_slave.cnf:
----
server_id =2

BinaryData
====
Events:  <none>

4.通过yaml资源清单创建configmap,这里的cnf文件因为是多行的,所以需要在文件名称后面打竖线

# cat mysql-configmap.yaml
> 
apiVersion: v1 
kind: ConfigMap 
metadata: 
 name: mysql 
 labels: 
   app: mysql 
data: 
 master.cnf: | 
   [mysqld] 
   log-bin 
   log_bin_trust_function_creators=1 
   lower_case_table_names=1 
 slave.cnf: | 
   [mysqld] 
   super-read-only 
   log_bin_trust_function_creators=1
将configMap配置给pod

1.通过configMapKeyRef配置pod

写一个configMap文件,再写一个pod文件

[root@master configmap]# cat mysql.yaml 
apiVersion: v1 
kind: ConfigMap 
metadata: 
  name: mysql 
  labels: 
    app: mysql 
data: 
  log: "1" 
  lower: "1"
[root@master configmap]# kubectl apply -f mysql.yaml 
configmap/mysql created
[root@master configmap]# cat mysql-pod.yaml
apiVersion: v1 
kind: Pod 
metadata: 
  name: mysql-pod 
spec: 
  containers: 
  - name: mysql 
    image: busybox 
    command: [ "/bin/sh", "-c", "sleep 3600" ] 
    env: 
    - name: log_bin #定义环境变量 log_bin 
      valueFrom: 
        configMapKeyRef: 
          name: mysql #指定 configmap 的名字 
          key: log #指定 configmap 中的 key 
    - name: lower #定义环境变量 lower 
      valueFrom: 
        configMapKeyRef: 
          name: mysql 
          key: lower 
  restartPolicy: Never

可以看到通过env字段中的configMapkeyRef字段,就可以把configmap中的值挂载到pod的环境变量中。

创建pod后查看环境变量,会看到挂载的值

[root@master configmap]# kubectl exec -it mysql-pod -- /bin/sh
/ # printenv
log_bin=1
KUBERNETES_SERVICE_PORT=443
KUBERNETES_PORT=tcp://10.96.0.1:443
HOSTNAME=mysql-pod
MY_NGINX_NODEPORT_SERVICE_HOST=10.99.238.240
SHLVL=1
HOME=/root
MY_NGINX_NODEPORT_PORT=tcp://10.99.238.240:80
MY_NGINX_NODEPORT_SERVICE_PORT=80
TERM=xterm
MY_NGINX_NODEPORT_PORT_80_TCP_ADDR=10.99.238.240
lower=1
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MY_NGINX_NODEPORT_PORT_80_TCP_PORT=80
MY_NGINX_NODEPORT_PORT_80_TCP_PROTO=tcp
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_PROTO=tcp
MY_NGINX_NODEPORT_PORT_80_TCP=tcp://10.99.238.240:80
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
KUBERNETES_SERVICE_HOST=10.96.0.1
PWD=/

2.通过envfrom将configmap应用到pod,直接将configmap都挂载到pod

apiVersion: v1
kind: Pod
metadata: 
  name: mysql-pod-envfrom
spec:
  containers:
  - name: busybox
    image: busybox
    imagePullPolicy: IfNotPresent
    command: ["/bin/sh","-c","sleep 3600"]
    envFrom:
    - configMapRef:
        name: mysql
  restartPolicy: Never

运行后进入该pod,查看环境变量,可以看到生效:

[root@master configmap]# kubectl exec -it mysql-pod-envfrom -c busybox -- /bin/sh
/ # printenv
KUBERNETES_PORT=tcp://10.96.0.1:443
KUBERNETES_SERVICE_PORT=443
HOSTNAME=mysql-pod-envfrom
MY_NGINX_NODEPORT_SERVICE_HOST=10.99.238.240
SHLVL=1
HOME=/root
MY_NGINX_NODEPORT_PORT=tcp://10.99.238.240:80
MY_NGINX_NODEPORT_SERVICE_PORT=80
TERM=xterm
MY_NGINX_NODEPORT_PORT_80_TCP_ADDR=10.99.238.240
lower=1
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MY_NGINX_NODEPORT_PORT_80_TCP_PORT=80
log=1
KUBERNETES_PORT_443_TCP_PORT=443
MY_NGINX_NODEPORT_PORT_80_TCP_PROTO=tcp
KUBERNETES_PORT_443_TCP_PROTO=tcp
MY_NGINX_NODEPORT_PORT_80_TCP=tcp://10.99.238.240:80
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_SERVICE_HOST=10.96.0.1
PWD=/

3.通过卷挂载将configmap传给pod,可以在pod内部看到配置文件,这是最常见的一种挂载configmap的方式

[root@master configmap]# cat mysql-config-volume.yaml 
apiVersion: v1
kind: Pod
metadata: 
  name: mysql-pod-volumes
spec:
  containers:
  - name: busybox
    image: busybox
    imagePullPolicy: IfNotPresent
    command: ["/bin/sh","-c","sleep 3600"]
    volumeMounts:
    - name: mysql-config
      mountPath: /tmp/config
  volumes: 
  - name: mysql-config
    configMap:
      name: mysql
  restartPolicy: Never
[root@master configmap]# kubectl exec -it mysql-pod-volumes -c busybox -- /bin/sh
/ # cd /tmp
/tmp # ls
config
/tmp # cd config
/tmp/config # ls
log    lower
/tmp/config # exit

此时如果查看环境变量是不会有lower 和log的,因为这一次挂载的是卷的形式。

configmap热更新

通过卷挂载的config可以实现热更新,而通过环境变量的不行。

现在修改mysql这个configMap的值,分别看看在mysql-config-envfrom和mysql-config-volume两个pod里面的值的更新状况。

将mysql里面的log改为2,进入mysql-config-volume可以看到log已被修改

[root@master configmap]# kubectl edit cm mysql 
configmap/mysql edited
[root@master configmap]# kubectl exec -it mysql-pod-volumes -c busybox -- /bin/sh
/ # cd /tmp/config
/tmp/config # ls
log    lower
/tmp/config # cat log
2/tmp/config # exit

 而mysql-config-envfrom的环境变量没有改变。所以挂载卷是configMap最合适的方式。

[root@master configmap]# kubectl exec -it mysql-pod-envfrom -c busybox -- /bin/sh
/ # printenv
KUBERNETES_PORT=tcp://10.96.0.1:443
KUBERNETES_SERVICE_PORT=443
HOSTNAME=mysql-pod-envfrom
MY_NGINX_NODEPORT_SERVICE_HOST=10.99.238.240
SHLVL=1
HOME=/root
MY_NGINX_NODEPORT_PORT=tcp://10.99.238.240:80
MY_NGINX_NODEPORT_SERVICE_PORT=80
TERM=xterm
MY_NGINX_NODEPORT_PORT_80_TCP_ADDR=10.99.238.240
lower=1
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MY_NGINX_NODEPORT_PORT_80_TCP_PORT=80
log=1
KUBERNETES_PORT_443_TCP_PORT=443
MY_NGINX_NODEPORT_PORT_80_TCP_PROTO=tcp
KUBERNETES_PORT_443_TCP_PROTO=tcp
MY_NGINX_NODEPORT_PORT_80_TCP=tcp://10.99.238.240:80
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_SERVICE_HOST=10.96.0.1
PWD=/
/ # 
secret

configmap保存的是明文的配置,而有些敏感的数据,需要用secret数据。secret解决了密码、token、密钥等的配置问题,而不需要把敏感数据暴露到镜像或者pod中。

secret有三种类型:generic: 通用类型,通常用于存储密码数据。 tls:此类型仅用于存储私钥和证书。 docker-registry: 若要保存 docker 仓库的认证信息的话,就必须使用此种类型来创建。

1.通过命令行定义

kubectl create secret generic sqlsecret --from-literal=password=fdflhs --from-literal=username=admin1

则创建了一个secret,通过kubectl describe查看

[root@master secret]# kubectl describe secret sqlsecret 
Name:         sqlsecret
Namespace:    default
Labels:       <none>
Annotations:  <none>

Type:  Opaque

Data
====
password:  9 bytes
username:  6 bytes

2.通过环境变量引入上面的secret

定义一个pod

apiVersion: v1
kind: Pod
metadata:
  name: sql-secret
spec: 
  containers:
  - name: busybox
    image: busybox
    imagePullPolicy: IfNotPresent
    command: ["/bin/sh","-c","sleep 3600"]
    env:
    - name:MYSQL_PASSWORD
      valueFrom:
        secretKeyRef:
          key: password
          name:sqlsecret
    - name:MYSQL_USERNAME
      valueFrom:
        secretKeyRef:
          key: username
          name:sqlsecret
    

查看pod的环境变量,发现引入成功 

 

3.通过卷挂载

定义secret卷

apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
data:
  username: YWRtaW4=
  password: SSBhbSBtYWNoaW5l

定义一个pod的yaml

apiVersion: v1
kind: Pod
metadata:
  name: pod-secret-volume
spec: 
  containers:
  - name: busybox
    image: busybox
    imagePullPolicy: IfNotPresent
    command: ["/bin/sh","-c","sleep 3600"]
    volumeMounts:
    - name: secret-volume
      mountPath: /tmp/config
  volumes:
  - name: secret-volume
    secret:
      secretName: mysecret

创建pod后,进入pod,查看挂载的目录,发现了解密后的password和username文件。

[root@master secret]# kubectl exec -it pod-secret-volume -c busybox -- /bin/sh
/ # cd tmp
/tmp # ls
config
/tmp # cd config
/tmp/config # ls
password  username
/tmp/config # cat password
I am machine
/tmp/config # cat usernmae
/tmp/config # cat username
admin
/tmp/config # exit

尝试热更新,成功

[root@master secret]# kubectl exec -it pod-secret-volume -c busybox -- /bin/sh
/ # cd /tmp/config
/tmp/config # ls
password  username
/tmp/config # cat username
hahades
/tmp/config # 

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

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

相关文章

ThinkPHP定时任务是怎样实现的?

接到一个需求&#xff1a;定时检查设备信息&#xff0c;2分钟没有心跳的机器&#xff0c;推送消息给相关人员&#xff0c;用thinkphp5框架&#xff0c;利用框架自带的任务功能与crontab配合来完成定时任务。 第一步&#xff1a;分析需求 先写获取设备信息&#xff0c;2分钟之…

华为5288 V5服务器安装BCLinux8U4手记

本文记录了华为5288 V5服务器安装BCLinux8U4操作系统的过程。 一、系统环境 1、服务器 华为FusionServer Pro 5288 V5服务器 2、操作系统 BCLinux-R8-U4-Server-x86_64-220725.iso 官网下载地址 sha256sum&#xff1a;1d31d3b8e02279e89965bd3bea61f14c65b9d32ad2ab6d4eb…

基于Java的壁纸网站设计与实现

&#x1f497;博主介绍&#x1f497;&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示&#xff1a;文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

JavaFx基础知识

1.Stage 舞台 如此这样的一个框框&#xff0c;舞台只是这个框框&#xff0c;并不管里面的内容 public void start(Stage primaryStage) throws Exception {primaryStage.setScene(new Scene(new Group()));primaryStage.getIcons().add(new Image("/icon/img.png"))…

HQ-SAM

不建议复现

腾讯云COS分布式对象存储

腾讯云COS分布式对象存储 腾讯云对象存储&#xff08;Cloud Object Storage&#xff0c;COS&#xff09;是腾讯云提供的一种用于存储海量文件的分布式存储服务。 腾讯云 COS 适用于多种场景&#xff0c;如静态网站托管、大规模数据备份和归档、多媒体存储和处理、移动应用数据存…

电脑彻底删除的文件还能恢复吗怎么弄 电脑删除的文件怎么恢复 回收站也删了

实测可行的文件恢复方法&#xff0c;无论是彻底删除的文件&#xff0c;还是被清空的回收站文件&#xff0c;使用该方法都可以轻松找回。整个恢复过程操作简单&#xff0c;并且绝不会损伤电脑硬件。这意味着&#xff0c;您再也不用为误删文件而焦虑了。有关电脑彻底删除的文件还…

在windows上安装objection

安装命令pip install objection -i https://mirrors.aliyun.com/pypi/simple hook指定进程 objection -g 测试 explore 进程名不定是包名&#xff0c;也可能是app名字&#xff0c;如“测试”就是app的名字 若出现如下错误&#xff0c;说明python 缺少setuptools 直接安装setu…

编程语言中浅拷贝(Shallow Copy)和深拷贝(Deep Copy)

编程语言中浅拷贝&#xff08;Shallow Copy&#xff09;和深拷贝&#xff08;Deep Copy&#xff09; 编程语言中浅拷贝&#xff08;Shallow Copy&#xff09;和深拷贝&#xff08;Deep Copy&#xff09;概念及JavaScript、Python、C、Java深拷贝和浅拷贝情况介绍。 浅拷贝和深拷…

【Redis】三大Redis内存分析工具介绍(Redisinsight、RDR、RMA)

目录 一、RedisInsight工具介绍 1、工具概述 2、关键特性 3、版本与服务 4、实际应用 二、Redis Data Reveal工具介绍 1、简介 2、主要特性 3、使用方法 4、注意事项 5、总结 三、Redis Memory Analyzer (RMA)工具介绍 1、工具概述 2、技术特点 3、应用场景 4、…

day02-统计数据

numpy统计学 1.求平均值[数组名.mean()/np.mean(数组名)] m1 np.arange(20).reshape((4,5))m1.mean() #9.5若想要求某一维的平均值&#xff0c;设置axis参数&#xff0c;多维数组元素指定&#xff1a; axis 0&#xff0c;将从上往下计算。axis 1&#xff0c;将从左往右计算…

使用getline()从文件中读取一行字符串

我们知道&#xff0c;getline() 方法定义在 istream 类中&#xff0c;而 fstream 和 ifstream 类继承自 istream 类&#xff0c;因此 fstream 和 ifstream 的类对象可以调用 getline() 成员方法。 当文件流对象调用 getline() 方法时&#xff0c;该方法的功能就变成了从指定文件…

最新抖音极速版双红包雨掘金助手

项目介绍&#xff1a; 抖音极速版目前小说里有双红包雨&#xff0c;单广告2000&#xff0c;金币1万比1&#xff0c;脚本自动看广告 设备需求&#xff1a; 安卓手机&#xff08;最高支持安卓13.0版本&#xff09; 购买后包含月卡脚本详细使用教程 百度网盘 请输入提取码百度…

SpringMVC 的工作流程和详细解释

Spring MVC&#xff08;Model-View-Controller&#xff09;框架是基于经典的 MVC 设计模式构建的&#xff0c;用于开发 Web 应用程序。下面是 Spring Boot MVC 的工作流程和详细解释&#xff1a; 1.客户端发起请求 1.客户端&#xff08;通常是浏览器&#xff09;发起 HTTP 请求…

中序遍历的两种实现——二叉树专题复习

递归实现&#xff1a; /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right)…

K8s 集群(kubeadm) CA 证书过期解决方案

Author&#xff1a;Arsen Date&#xff1a;2024/07/04 目录 一、现象描述二、解决方案三、集群验证 一、现象描述 之前有篇文章《K8s Token 过期解决方案&#xff08;Kubeadm&#xff09;》提到了默认生成的 Token 有效期只有 24 小时&#xff0c;过期后 Token 将不可用&#…

Robust Test-Time Adaptation in Dynamic Scenarios--论文阅读

论文笔记 资料 1.代码地址 https://github.com/BIT-DA/RoTTA 2.论文地址 https://arxiv.org/abs/2303.13899 3.数据集地址 coming soon 1论文摘要的翻译 测试时间自适应(TTA)旨在使预先7训练的模型适用于仅具有未标记测试数据流的测试分布。大多数以前的TTA方法已经在…

实现统计n个数以下质数的个数

#define _CRT_SECURE_NO_WARNINGS #include <stdio.h>int main() {int n 0;scanf("%d", &n);int sum 0;for (int i 1; i < n; i){for (int j 2; j < i; j) {if (i % j 0){sum;break;}}}printf("%d", n - sum-1);return 0; } n为输…

数字媒体技术基础之:DNG 文件

DNG&#xff08;Digital Negative&#xff09;文件是一种用于存储原始图像数据的文件格式&#xff0c;由 Adobe Systems 于2004年开发并推广。DNG 是一种开放的、非专利的原始图像格式&#xff0c;旨在为不同相机制造商提供一个统一的存储格式。DNG 文件保存了原始的、未处理的…

【C语言】刷题笔记 Day2

【笔记】 【1】局部变量不初始化&#xff0c;默认放的随机值。 1 int n0; 2 scanf("%d",&n); //13.141 【2】这里虽然输入的是一个浮点数&#xff0c;但是只取整数部分。 【3】3.156e7 表示的是3.156*10的7次方。 【4】多组输入&#xff0c;保存和不保存…