terraform部署kubernetes1.26.12集群
使用terraform部署一个kubernetes1.26.12集群
Terraform用途: Terraform是一种基础设施即代码(IaC)工具,用于自动化云和本地基础设施的创建、更新和删除。它支持多云平台,如AWS、Azure、Google Cloud等,以及本地虚拟化平台。工作原理: 用户通过编写HCL(HashiCorp Configuration Language)代码描述所需的基础设施资源,例如虚拟机、存储桶、网络配置等。然后,Terraform根据这些代码执行计划,将实际基础设施配置为代码中所描述的状态。
Kubernetes用途: Kubernetes是一个开源的容器编排平台,用于自动化、部署、扩展和管理容器化应用程序。它提供了一种容器编排的解决方案,使得应用程序可以在一个集群中灵活运行,并自动处理容器的调度、伸缩和故障恢复。工作原理: 用户将应用程序容器化,并使用Kubernetes定义应用程序的部署、服务、配置等方面的规范。Kubernetes集群负责管理这些容器,确保它们在可用节点上运行,并提供高度可扩展的、自我修复的应用程序部署。
项目地址https: ...
golang terraform kubernetes结构体
terraform提供了kubernetes provider(相当于kubectl),但是却不兼容k8s api库的json输出名,对整体输出名都进行了重构;此处例举了Deployment Service Job 等Kind的golang struct,希望可以帮到golang开发人员;
terraform-k8s-type.go
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 ...
kubernetesalias:kubernetes封装命令工具
愉快的执行kubernetes集群封装命令
使用要求工具需要在master节点进行运行,确保存在集群管理员kubeconfig(/etc/kubernetes/admin.conf)文件
功能描述点击工具名称即可进行下载
kls列出整个集群的所有pod信息,包含pod ip,所在节点; 仅列出某个namespace,例如: kls kube-system(可选)
klss列出整个集群的所有service信息; 仅列出某个namespace,例如: klss kube-system(可选)
kdel传递条件,筛选出符合条件的所有pod信息,传递编号进行删除对应编号的pod;支持删除单个pod,同时删除多个pod
klog传递条件,筛选出符合条件的所有pod及容器信息,传递编号进行查看对应编号的容器日志; 例如: klog pod名 查看倒数行数(可选)
kdebug为了安全和缩小容器镜像,大部分容器是不会安装常用的linux命令的,需要查看服务端口运行情况和查看ip地址信息和进程,可通过kubernetes Ephemeral Containers功能进行查看此容器只是共享了pod ...
kube-prometheus+thanos 多集群prometheus方案存储方案
多kubernetes集群中,Prometheus 负责将监控数据写入 Thanos 存储网关,而 Thanos 查询网关则允许从 Thanos 存储网关中读取和查询数据。这种集成允许 Prometheus 在持久化存储和跨集群查询方面获得扩展性和弹性。
kube-prometheus原名为prometheus-operator,可参考之前的Prometheus-Operator监控k8s
官方githubhttps://github.com/prometheus-operator/kube-prometheus.git
整体部署
123git clone <https://github.com/prometheus-operator/kube-prometheus.git>cd kube-prometheus/manifests
执行crd创建,因crd内容比较多,使用apply会提示long错误,此处使用create进行创建
1kubectl create -f setup/
创建kube-prometheus组件所有服务
1kubectl apply -f .
...
kube-deploymentimage:k8simage-operator改良版本
为kubernetes集群中,由deployment方式进行部署的服务提供image版本回滚功能
需求场景
当master节点上存放的yaml无法在使用kubect set image时进行同步更新
官方提供的—record参数仅可能在kubectl set image时使用,回滚还需要额外的回滚操作命令,没有统一的UI界面
服务描述
提供展示部署后所有命名空间下的Deployment的容器镜像信息
提供回滚到对应版本的按钮update
提供本地存储的yaml文件预览(鼠标滑动到对应的yaml路径即可)
清理不需要的镜像版本信息delete(假删除,数据库中还有记录)
修复k8simage-operator中Create,Update event多次触发Reconcile方法
增加对容器列表增加和减少场景的处理
部署配置需要准备一个mysql5.7的数据库服务,需提前建立好数据库,项目数据库名为:kube-deploymentimage,可使用下面sql进行创建即可。
1CREATE DATABASE IF NOT EXISTS `kube-de ...
containerd基础概念
containerd的前世今生,与docker的关系、如何部署containerd、如何接入k8s中
OCIOCI(Open Container Initiative)开放容器倡议,OCI由docker以及其他容器行业领导者创建于2015年,目前主要有两个标准:容器运行时标准(runtime-spec)和容器镜像标准(image-spec)
这两个标准通过OCI runtime filesytem bundle的标准格式连接在一起,OCI镜像可以通过工具转换成bundle,然后 OCI 容器引擎能够识别这个bundle来运行容器
CRICRI(Container Runtime Interface)容器运行时接口,CRI是kubernetes推出的一个标准,推出标准可见其在容器编排领域的地位
runc、containerd 等运行时都去支持此接口。
runcrunC的前身是docker的libcontainer项目,在libcontainer的基础上做了封装,捐赠给OCI的一个符合标准的runtime实现,docker引擎内部也是基于runC构建的
runC只做一件事情就是运行容 ...
k8s集群高版本1.18以上常见服务部署yaml
此模块专门提供k8s集群中的常见服务的部署yaml下面的服务是建立在k8s集群1.18.6以上的
下面涉及到的namespace请修改为你的namespace下载页面
Docker基础概念
工作中可能常用的docker基础命令,可能有些命令已经淘汰,此处介绍常用的一些docker使用,主要是基础概念
镜像Dockerfile1.CMD:命令/参数;
2.ENTRYPOINT:命令;docker –entrypoint=命令 镜像名 /进行覆盖操作
3.WORKDIR:工作目录;docker -w=绝对路径 镜像名 、进行覆盖
4.ENV:环境变量/变量;永久的保存到建立的容器中,docker -e 变量=值 镜像名 可进行容器增加全局变量
5.USER: 指定用户去运行容器,不指定就是root,用户名:组名;格式
6.VOLUME:卷
7.ADD:复制和解压,构建缓存失效,源文件必须在Dockerfile同一级目录下
8.COPY:复制文件
9.ONBUILD:触发器
Dockerfile中没法使用source来添加环境变量,必须使用ENV
镜像制作命令镜像名命名格式为:用户/服务:标签,如果你想上传到docker hub或者自己的私库,就需要将用户名设置正确的,如果不正确也可以使用docker tag进行复制镜像并重命名,也可将运行的容器docker commit为 ...
wait-injection服务依赖等待注入
在kubernetes集群中,服务之间存在依赖关系,wait-injection利用initcontainer功能快速便捷的为服务添加相应的依赖关系
项目地址https://github.com/huisebug/wait-injection.git
部署配置12kubectl apply -f cert-manager.yamlkubectl apply -f wait-injection.yaml
为需要进行注入的服务所在命名空间打上label
1kubectl label namespace 业务namespace wait-pod-admission-webhook-injection=enabled
利用kubernetes pod注入对运行的服务进行注入容器,注入多个init容器需要在以下进行注解pod.spec.template.metadata.annotations
tcpsocket.waiting.huisebug.org/dep数字: ip:端口号或者域名:端口号tcpsocket使用telnet对依赖服务和端口进行telnet
httpget.wait ...
logfile-operator:服务日志系统收集多方案
为kubernetes集群中部署服务提供多日志收集服务,快速接入多种部署方案的日志系统
需求场景
当pod中有多个容器时,需要对pod中的容器进行日志收集
研发人员需要快速对服务进行日志收集后在kibana中集中查看
功能描述
利用kubernetes pod注入对运行的服务进行注入容器,注入的容器和原容器在pod annotations配置的日志文件所在目录进行卷挂载,注解中配置的日志文件进行卷挂载,例如:1234 template: metadata: annotations: logfile.huisebug.org/log1: /var/log/nginx/*.log
提供六种日志收集部署方案
filebeat+elasticsearch+kibana
filebeat+elasticsearch-cluster+kibana
filebeat+logstash+elasticsearch+kibana
filebeat+logstash+elasticsearch-cluster+kibana
...