k8s学习笔记(一)

configMap

一般用来存储配置信息

创建configMap

从文件中获取信息创建:kubectl create configmap my-config --from-file=/tmp/k8s/user.txt

直接指定信息:

kubectl create configmap my-config01 --from-literal=key1=config1 --from-literal=key2=config2

ymal文件创建

ConfigMap的使用

为什么使用: 1,复用配置文件,可以启动多个nginx的pod,共同使用同一个pod

2,便于修改,维护

如何使用:

1 将ConfigMap中的数据设置为容器的环境变量

定义configmap

kubectl create configmap my-config05 --from-literal=key1=123

2 configmap挂载

案例将名为my-config的cm挂载到pod中的/etc/config目录下,可以进入容器查看

注意:subPath: nginx.cong #如果mountPath挂载目录之前有数据,需要在下面加上subPath,表示不会覆盖原有数据。换句话说就是指定某个文件挂载,而不是挂载全部

secret

与configmap类似

探针

种类

livenessProbe

readynessProbe

startupProbe(1.16新引入)

探测方法

ExecAction(执行命令,正确返回0,错误返回非0)、

HttpGet(访问htttp页面,正确则显示正常,错误则会在svc中的endpoints中删除对应的pod,直至下次检查成功

TcpSocket: 通过TCP 连接来检查容器的状态。它通常用于检查容器内部的 TCP 服务是否可以正常连接。

livenessProbe

exec

root@master day07\]# cat liveness-exec.yml apiVersion: v1 kind: Pod metadata: labels: test: liveness name: liveness-exec-001 spec: containers: - name: liveness image: nginx args: #定义容器启动时执行的命令 - /bin/sh - -c - touch /tmp/healthy; sleep 30; rm -f /tmp/healthy; sleep 600 livenessProbe: #指定livess检查 exec: #指定检查方式为执行命令 command: - cat - /tmp/healthy #命令成功返回0,失败返回非0,并杀死,重启 initialDelaySeconds: 5 #在容器启动后多久开始进行首次 liveness 检查,这里是 5 秒 periodSeconds: 5 #定义 liveness 检查的执行周期,每隔 5 秒钟执行一次。 pod状态为running时,此时exec进入pod中删除/usr/nginx/html/下面的index.html,使用describe 查看pod状态会显示错误,过一会重启后有显示正常(重启pod会自动创建新的container,index.htm存在) tcpsocket \[root@master day07\]# cat liveness-tcp.yml apiVersion: v1 kind: Pod metadata: name: goproxy labels: app: goproxy spec: containers: - name: goproxy image: nginx ports: - containerPort: 80 livenessProbe: tcpSocket: port: 88 #定义检查端口88是否可用15s后检测失败,容器重启 initialDelaySeconds: 15 periodSeconds: 20 #### rc (ReplicationController),老版本使用,将来(1.6版本)被禁用,不支持热更新 ReplicationController 确保在任何时候都有特定数量的 Pod 副本处于运行状态。 换句话说,ReplicationController 确保一个 Pod 或一组同类的 Pod 总是可用的。 RC通过`spec.replicas`字段设置期望的Pod副本数,并通过`spec.template`定义Pod的模板,包括容器和标签等信息,它不支持滚动更新或灰度发布 首先通过rc创建三个pod,基于nginx镜像,标签lables为app=nginx,副本数为3 ![](https://img-blog.csdnimg.cn/direct/dae40a174627425c8516c6a3bb59654c.png) 查看pod状态 ![](https://img-blog.csdnimg.cn/direct/cf2c5c27cea040fbb6717ae54c5fbe18.png) 删除pod,测试rc是否可以维持pod个数 ![](https://img-blog.csdnimg.cn/direct/4cddc2a60a914189951bf4d573ee1729.png) 再次查看pod ![](https://img-blog.csdnimg.cn/direct/37b124cca04e43fa83fb5af1b567c965.png) 发现pod数量不变,但是IP和node节点发生变化 #### rs (replicasets) 相当于是rc的升级 RC通过`spec.replicas`字段设置期望的Pod副本数,并通过`spec.template`定义Pod的模板,包括容器和标签等信息 #### deployment 实际上是对rs的封装和升级,通过 ReplicaSet 来管理 Pod 的副本集。 供了对Pod副本集部署和更新的声明式配置,支持滚动更新、回滚和版本控制等功能 Deployment通过`spec.replicas`字段设置期望的Pod副本数,并通过`spec.template`定义Pod的模板,与RC和RS类似。不同之处在于,Deployment还支持`spec.strategy`字段,用于定义更新策略,例如滚动更新的速率和暂停条件, 其中deployment.spec.strategy.rollingUpdate下的两个重参数 maxSurge:在滚动更新期间可以创建的额外的 Pod 的最大数量或百分比,可以是一个值或百分比 maxUnavailable:滚动更新期间可以创建的额外的 Pod 的最大数量或百分比,值或百分比 ###### deploy的更新与回滚 更新 原理,通过修改image的版本不同,curl -I ip:端口显示的nginx版本不同 ![](https://img-blog.csdnimg.cn/direct/495c57558f894719a603eccb8bc26172.png) 查看pod创建情况,这里的镜像版本为最新 ![](https://img-blog.csdnimg.cn/direct/97c8325ef95741c3a0e8b866816b7738.png) 测试版本,版本为1.21.5 ![](https://img-blog.csdnimg.cn/direct/0dacf9e3511d4af8821a9bb43bee81e6.png) 版本的回滚,指定版本为1.16.1 直接vim编辑配置文件修改即可 把image: nginx修改为image: nginx1.16.1,保存退出 kubectl apply -f deploy-pod.yml 此时再次测试,实现通过deployment回滚版本 ![](https://img-blog.csdnimg.cn/direct/2b9b202d059c4cc192e525c01a3c8667.png) 版本升级与回滚类似,vim修改镜像版本即可,完成后保存退出 执行kubectl apply -f deploy-pod.yml #### service service有4中类型 ExternalName, ClusterIP, NodePort, and LoadBalancer,默认为Cluster,配置好之后只能在k8s集群内部访问,NodePort可以在集群外部访问 ###### NodePort ![](https://img-blog.csdnimg.cn/direct/cd6763bc6a364858bad7c56cb87ce523.png) ![](https://img-blog.csdnimg.cn/direct/67ac4213ddbb47758e37e557653d2c50.png) 此时可以在浏览器上输入192.168.199.149:32054,成功访问nginx,150,151也可以 ###### ClusterIP 创建service kubectl apply -f service.yml ![](https://img-blog.csdnimg.cn/direct/8328e3b1913f43f48964da6051b620d3.png) 查看svc![](https://img-blog.csdnimg.cn/direct/a69c8dc567c54726bff257a943e38e48.png) ###### 服务发现 service会自动通过lables发现可用的pod节点,并把节点的ip加入到endps列表中 查看svc的endpoint,把符合条件的三个pod加入到列表中 ![](https://img-blog.csdnimg.cn/direct/4e1e808f503143429fc32433de4a8e22.png) 删除pod,测试service是否能自动发现新创建的pod ![](https://img-blog.csdnimg.cn/direct/097dcf06788f46c8b6f19865d0efdcad.png) 查看endpoints,发现service的自动发现服务正常 ![](https://img-blog.csdnimg.cn/direct/f9278f1ec7ae44a69edcb39d147dbda0.png) ###### 负载均衡 查看pod情况 ![](https://img-blog.csdnimg.cn/direct/6679364622f040149d24ae25605bb886.png) 为了测试负载均衡,这里修改nginx服务的html配置文件,以达到负载均衡效果 ![](https://img-blog.csdnimg.cn/direct/5a53941f429947a39c764a4d098f7a82.png) 查看service ![](https://img-blog.csdnimg.cn/direct/98d56b4da2c542d9bdf347b4dc514173.png) 测试负载均衡 ![](https://img-blog.csdnimg.cn/direct/926b25cc5955450baab566324ffe4e5d.png)

相关推荐
会又不会2 分钟前
Jenkins-Email Extension 插件插件
运维·jenkins
电脑能手43 分钟前
[保姆级教程] 解决不同局域网电脑无法SSH的问题
运维·ssh·电脑
tan77º1 小时前
【Linux网络编程】Socket - UDP
linux·服务器·网络·c++·udp
czhc11400756631 小时前
Linux 76 rsync
linux·运维·python
szxinmai主板定制专家2 小时前
【精密测量】基于ARM+FPGA的多路光栅信号采集方案
服务器·arm开发·人工智能·嵌入式硬件·fpga开发
你不知道我是谁?2 小时前
负载均衡--四层、七层负载均衡的区别
运维·服务器·负载均衡
蓝易云2 小时前
Qt框架中connect()方法的ConnectionType参数使用说明 点击改变文章字体大小
linux·前端·后端
dyj0953 小时前
【Rancher Server + Kubernets】- Nginx-ingress日志持久化至宿主机
运维·nginx·rancher
花落已飘3 小时前
多线程 vs 异步
linux·网络·系统架构
PanZonghui3 小时前
Centos项目部署之Nginx部署项目
linux·nginx