[单master节点部署]14.deamonSet和configMap

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=/
/ # 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python对象不可哈希?教你几招解决!

目录 1、什么是可哈希?🚀 1.1 哈希基础理论 1.2 可哈希对象定义🔍 示例代码: 1.3 Python中哈希的作用 1.4 哈希表与性能提升📈 应用实例代码: 2、Python中的哈希特性🔑 2.1 不变性与哈希值🔄 示例代码展示: 2.2 实现细节深入探讨📚 深入代码细节:…

小区服务前台小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;住户管理&#xff0c;管理员管理&#xff0c;员工管理&#xff0c;安保管理&#xff0c;安保分配管理&#xff0c;客服聊天管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;公告&#xff0c;…

【传知代码】揭秘AI如何揪出图片中的“李鬼”(论文复现)

在数字化时代&#xff0c;我们时常被各种图像信息所包围。然而&#xff0c;这些图像中有时隐藏着不为人知的秘密——被篡改的文字或图像。这些被篡改的内容可能误导我们的判断&#xff0c;甚至在某些情况下造成严重的后果。幸运的是&#xff0c;随着人工智能&#xff08;AI&…

免费开源AI生产力工具:内置专属ChatGPT、一键智能处理图片和视频(擦除水印、卡通漫画、无损放大、插值补帧、智能修复、3D转制、上色修复、合成整理)

AI 生产力工具 免费开源&#xff0c;提升用户生产力&#xff0c;保障隐私和数据安全。提供高效便捷的AI解决方案&#xff0c;包括但不限于&#xff1a;内置专属ChatGPT、一键批量智能处理图片和视频等。 主要特点 免费开源&#xff1a;免费使用&#xff0c;源代码开放&#…

使用Nginx反向代理KKFileView遇到问题

使用KKFileView 4.0 以上版本 在KKFileView官网上&#xff0c;关于使用Nginx代理&#xff0c;建议配置如下 一、修改Nacos 在Nginx的conf文件夹中修改 nginx.conf ,新加 红框内的IP地址为代理服务器地址&#xff08;即安装KKFileView的服务器地址&#xff09; 二、修改KKFil…

逻辑这回事(七)---- 器件基础

Xilinx FPGA创建了先进的硅模块(ASMBL)架构,以实现FPGA具有针对不同应用程序领域优化的各种功能组合的平台。通过这一创新,Xilinx提供了更多的设备选择,使客户能够为其特定设计选择具有正确的功能和功能组合的FPGA。ASMBL体系结构通过以下方式突破了传统的设计障碍:消除几…

一个时代的结束:Centos7将在6月30日退出历史舞台

友情提醒&#xff1a; 如果你使用的是曾经辉煌一时的CentOS Linux 7&#xff0c;一直拖延没有迁移&#xff0c;那么现在距离它正式寿终正寝还有不到一周的时间。 CentOS Linux 7 的结束日期仍定在2024年6月30日。红帽早在 2020 年就做出了有争议的举动&#xff0c;将重点转移到…

前后端交互整合 - Wiki

集成 Http 库 axios 首先在前端工程中安装 axios ,切换为 wiki / web 目录下,安装命令行为 npm install axios --save 通过 axios 调用电子书列表接口: 定义 setup( ) 方法,页面被调用时便会执行此方法,在方法中要想使用 axios ,首先需要引入 axios 包: import axios f…

网络安全 文件上传漏洞-18 第十八关 Pass-18

点击进入第十八关&#xff0c;并选择显示代码&#xff1a; //index.php $is_upload false; $msg null; if (isset($_POST[submit])) {require_once("./myupload.php");$imgFileName time();$u new MyUpload($_FILES[upload_file][name], $_FILES[upload_file][tmp…

百日筑基第七天-JAVA开发IDEA调试技巧(常用按钮)

百日筑基第七天-JAVA开发IDEA调试技巧&#xff08;常用按钮&#xff09; 1.Show Execution Point 快捷键&#xff1a;Alt F10 回到当前激活的断点处&#xff1b;当你的鼠标不在断点所处的行&#xff0c;点击之后&#xff0c;会立马复位到断点处&#xff1b; 2.Step Ove 快…

你需要精益管理咨询公司的N+1个理由

近年来&#xff0c;精益管理作为一种被全球众多知名企业验证过的成功管理模式&#xff0c;越来越受到企业的青睐。但是&#xff0c;为何在实施精益管理的过程中&#xff0c;众多企业纷纷选择请咨询公司来协助呢&#xff1f;今天&#xff0c;我们就来一起揭秘这背后的原因。 1. …

go Channel原理 (三)

Channel 设计原理 不要通过共享内存的方式进行通信&#xff0c;而是应该通过通信的方式共享内存。 在主流编程语言中&#xff0c;多个线程传递数据的方式一般都是共享内存。 Go 可以使用共享内存加互斥锁进行通信&#xff0c;同时也提供了一种不同的并发模型&#xff0c;即通…

使用热力图表示联邦学习场景中的客户端数据分布

用于生成热力图&#xff0c;记录过程&#xff0c;方便之后直接使用。 使用场景&#xff1a;联邦学习中显示客户端数据分布&#xff0c;或者显示数据分布的各类其他场景 文章目录 一、代码hot.py使用方法 二、参数解释三、样图关键词 一、代码 写这段代码时主要考虑联邦学习中显…

阿里云物联网应用层开发:第一部分,项目简介

文章目录 1、物联网应用层简介2、阿里云物联网应用层开发例程主要内容3、需要掌握基础知识 1、物联网应用层简介 应用层是物联网系统的用户界面&#xff0c;它提供了用户与系统交互的接口&#xff0c;这一层是将网络传输层的数据结果以易于理解和使用的方式呈现给用户&#xf…

在AvaotaA1全志T527开发板上使用 SSH 连接开发板

使用 SSH 连接开发板 启动系统 前提条件&#xff1a; 确保已经制作好AvaotaA1系统镜像至TF卡。 ​ 确保开发板电源供电正常&#xff1a;默认SPI显示屏有图案输出。 确保当前环境下有可以正常上网的路由器RJ45网线接口。 获取IP地址 如果想通过ssh去登陆开发板系统&#…

广义加性模型

简要介绍 在统计学中&#xff0c;广义加性模型&#xff08;GAM&#xff09;是一种广义线性模型&#xff0c;其中线性响应变量线性地依赖于一些预测变量的未知光滑函数&#xff0c;并且人们对这些光滑函数的推理很感兴趣。 GAM最初由Trevor Hastie和Robert Tibshirani[1]开发&…

数据写入流程,数据读取流程

理解客户端在HDFS上读、写数据的流程 数据写入流程 1. 客户端向NameNode发起请求 2. NameNode审核权限、剩余空间后&#xff0c;满足条件允许写入&#xff0c;并告知客户端写入的DataNode地址 3. 客户端向指定的DataNode发送数据包 4. 被写入数据的DataNode同时完成数据副本的…

mysql岗位实习----教务系统管理

教务管理系统 一、DDL CREATE TABLE users (user_id int(11) NOT NULL AUTO_INCREMENT COMMENT 用户ID,username varchar(50) NOT NULL COMMENT 用户名,password varchar(255) NOT NULL COMMENT 密码,gender enum(男,女) NOT NULL COMMENT 性别,email varchar(100) DEFAULT N…

绿色算力|暴雨发布浸没式液冷服务器

随着数字经济的飞速发展和AI创新应用的不断突破&#xff0c;算力规模持续增长&#xff0c;最新发布的《数字中国发展报告&#xff08;2023年&#xff09;》显示&#xff0c;2023年中国算力总规模达到230EFLOPS&#xff0c;居全球第二位。 服务器作为算力基础设施底座&#xff…

spring中集成mybatis,并测试是否成功

首先你要配置pom.xml <!-- 连接 MySQL 数据库的驱动程序 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.16</version></dependency><!-- spring-jdbc -->&…