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

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

查看pod状态

删除pod,测试rc是否可以维持pod个数

再次查看pod

发现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版本不同


查看pod创建情况,这里的镜像版本为最新

测试版本,版本为1.21.5

版本的回滚,指定版本为1.16.1

直接vim编辑配置文件修改即可

把image: nginx修改为image: nginx1.16.1,保存退出

kubectl apply -f deploy-pod.yml

此时再次测试,实现通过deployment回滚版本

版本升级与回滚类似,vim修改镜像版本即可,完成后保存退出

执行kubectl apply -f deploy-pod.yml

service

service有4中类型 ExternalName, ClusterIP, NodePort, and LoadBalancer,默认为Cluster,配置好之后只能在k8s集群内部访问,NodePort可以在集群外部访问

NodePort

此时可以在浏览器上输入192.168.199.149:32054,成功访问nginx,150,151也可以

ClusterIP

创建service

kubectl apply -f service.yml

查看svc

服务发现

service会自动通过lables发现可用的pod节点,并把节点的ip加入到endps列表中

查看svc的endpoint,把符合条件的三个pod加入到列表中

删除pod,测试service是否能自动发现新创建的pod

查看endpoints,发现service的自动发现服务正常

负载均衡

查看pod情况

为了测试负载均衡,这里修改nginx服务的html配置文件,以达到负载均衡效果

查看service

测试负载均衡

相关文章:

  • 【AI】消融实验ablation study
  • Zookeeper 集群节点故障剔除、切换、恢复原理
  • CFD笔记
  • 【ai】tx2-nx:搭配torch的torchvision
  • MySQL之复制(七)
  • RPM命令和YUM命令
  • fastadmin多语言切换设置
  • Python里引用了time包后,不能再命名time变量了吗?
  • 基于springboot的人口老龄化社区服务与管理平台源码数据库
  • 1039. 多边形三角剖分的最低得分
  • 鸿蒙开发通信与连接:【@ohos.rpc (RPC通信)】
  • 【Go语言】Gin 框架教程
  • vue嵌套H5到APP,安卓键盘顶起页面内容错乱解决方案
  • shell中的条件判断
  • Kubernetes容器运行时:Containerd vs Docke
  • SegmentFault for Android 3.0 发布
  • ES6之路之模块详解
  • JS字符串转数字方法总结
  • node入门
  • Python socket服务器端、客户端传送信息
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • Vue 2.3、2.4 知识点小结
  • - 概述 - 《设计模式(极简c++版)》
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 前端知识点整理(待续)
  • 区块链将重新定义世界
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 使用 5W1H 写出高可读的 Git Commit Message
  • zabbix3.2监控linux磁盘IO
  • 浅谈sql中的in与not in,exists与not exists的区别
  • ​批处理文件中的errorlevel用法
  • # Java NIO(一)FileChannel
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • #13 yum、编译安装与sed命令的使用
  • #pragma pack(1)
  • #大学#套接字
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (9)目标检测_SSD的原理
  • (C++)八皇后问题
  • (function(){})()的分步解析
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (代码示例)使用setTimeout来延迟加载JS脚本文件
  • (二)原生js案例之数码时钟计时
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (含答案)C++笔试题你可以答对多少?
  • (汇总)os模块以及shutil模块对文件的操作
  • (十三)Flink SQL
  • .bat批处理(一):@echo off
  • .NET Core Web APi类库如何内嵌运行?
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)
  • .Net 基于MiniExcel的导入功能接口示例
  • .NET精简框架的“无法找到资源程序集”异常释疑
  • @antv/g6 业务场景:流程图