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

kustomize/kubectl自动镜像部署互联网企业规范化上线流程(下) —— k8s从入门到高并发系列教程 (七)

        通过前面的学习,我们可以做到当分支被合并到master时,程序自动打包出包含最新代码的docker镜像,并用commitid给镜像打了个tag。然而仅仅拥有docker镜像并不够,企业使用的是k8s环境,需要持续的把最新镜像的地址更新到k8s的yaml文件中,真正线上执行部署的是k8s的yaml文件。

        当线上环境的镜像重新生成新的时,我们希望有一个工具能够自动帮我们完成这些修改, kustomize 便应运而生。它基于 kustomization.yaml 文件修改镜像,kustomization.yaml 包含对需要执行的子k8s yaml文件的引用,kustomize build 命令可以把 kustomization.yaml 文件内容翻译成可以被k8s所理解、可执行的配置文件。

        真正执行线上部署的是 kubectl 工具,它读取 ~/.kube/config 文件的信息,用于和k8s集群的通信,读取k8s 的yaml文件,发送到k8s集群进行执行。

安装kubectl和kustomize工具

        在我们的docker-mybasic项目的dockerfile文件中加入以下内容,以下载安装这两个工具,同时拷贝k8s集群的kubeconfig文件到gitlab的部署镜像中

# 安装curl命令,供下面流程安装工具软件
RUN apk add --no-cache curl# 拷贝kubeconfig文件内容到镜像中,作为kubectl和集群通信的工具
COPY kubeconfig/config /root/.kube/config# 安装kubectl
RUN curl -L "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" -o /usr/local/bin/kubectl \&& chmod +x /usr/local/bin/kubectl# 安装kustomize
RUN curl -Lo /usr/local/bin/kustomize https://github.com/kubernetes-sigs/kustomize/releases/download/v3.2.0/kustomize_3.2.0_linux_amd64 \&& chmod +x /usr/local/bin/kustomize

因为我的电脑处理器是arm64的,上面下载的kubectl 和 kustomize 是基于amd64处理器,无法使用,于是更改下载地址如下

curl -L "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/arm64/kubectl" -o /usr/local/bin/kubectl
curl -Lo /tmp/kustomize.tar.gz https://ghproxy.com/https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize%2Fv4.5.7/kustomize_v4.5.7_linux_arm64.tar.gz \&& cd /tmp && tar zxvf kustomize.tar.gz && mv kustomize /usr/local/bin

这样,我们的mydocker镜像就有能力执行kustomize命令以及部署yaml文件到线上了

deployments和services

         test_cd项目是由运维负责的和具体环境部署相关的文件集合,我们在test_api和test_client1的k8s文件夹中创建 deployments 和 services 文件夹,deployments文件夹中的api.yaml文件内容如下:

apiVersion: apps/v1
kind: Deployment
metadata:labels:app: test-apiname: test-api
spec:selector:matchLabels:app: test-apitemplate:metadata:labels:app: test-apispec:containers:- name: test-apiimage: dockerhub.qingcloud.com/mustafa_project/test_api_productports:- containerPort: 80name: tcpresources:requests:cpu: 20mmemory: 128Milimits:cpu: 500mmemory: 512MiimagePullSecrets:- name: docker-qingcloud-secret

        deployments是负责管理images的单元,这个deployment包含的image不用写tag,tag可以在kustomize命令中程序自动生成。使用 docker-qingcloud-secret 这个私钥拉取镜像,私钥的配置方式如下:

kubectl create secret docker-registry docker-qingcloud-secret --docker-server=dockerhub.qingcloud.com --docker-username=*** --docker-password=**** -n test-project1

        servies是deployments对外暴露的端口,services中的api.yaml文件内容如下:

apiVersion: v1
kind: Service
metadata:name: test-api
spec:ports:- name: http-apiprotocol: TCPport: 80targetPort: 80selector:app: test-api

kustomization.yaml文件

        文件在k8s目录下,这个文件记录了线上部署依赖哪些子配置文件,内容如下:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomizationnamespace: test-project1resources:
- ./k8s/deployments/api.yaml
- ./k8s/services/api.yaml

可以看出,包含了一个deployment文件和一个service文件

kustomize build命令可以读取这个文件,生成一个完整的,k8s能够理解的配置文件

kustomize edit set image 命令可以修改kustomization.yaml文件,把deployments中的images进行字符串替换

kustomize 命令

        在test_api项目的.gitlab-ci.yaml文件代码发送到cd项目这块,加入以下代码,可以实现当分支合并到main分支后,修改kustomize文件的image为最新image的tag,git提交推送test_cd项目,解释kustomization.yaml文件并通过kubectl执行部署

    - kustomize edit set image $docker_url/mustafa_project/$CI_PROJECT_NAME"_"$ENV=$docker_url/mustafa_project/$CI_PROJECT_NAME"_"$ENV:$CI_COMMIT_SHA- git commit -am "修改镜像版本号$CI_COMMIT_SHA" && git push origin $ENV- kustomize build | kubectl apply -f -

        kustomize edit命令 修改镜像版本号为我们当前的commitid

        kustomize build 解释我们上面编写的kustomization.yaml文件,为k8s可以理解的文件

        kubectl apply -f - 根据kubeclt的配置文件,进行k8s相应的部署过程

        你会发现,kustomization.yaml文件是真正和线上部署一一对应的配置文件。这样,每当分支被合并到master时候,会导致kustomization.yaml文件中相关镜像的修改,并将该修改直接发布上线、

 相关链接

手把手教你部署nginx+php

php和nginx镜像合并 && 代码打包到镜像 

nginx-php镜像安装常用软件 

yaf && yar微服务/hprose微服务 镜像初始化 

常用开发工具:php_codesniffer代码规范检查&修复、phpstan语法检查、phpunit单元测试 

.gitlab-ci.yaml自动镜像打包&&互联网企业规范化上线流程(上) 

kustomize/kubectl自动镜像部署&&互联网企业规范化上线流程(下) 

apisix网关、JMeter压测  

prometheus/grafana监控数据收集与展示 

k8s容器网络性能调优 

supervisor进程管理 

安装opcache和apcu 

APM性能监测工具skywalking 

链路跟踪工具zipkin

phpfpm和nginx配置

php整合apollo配置中心

php rdkafka操作kafka消息队列

http://www.xdnf.cn/news/817057.html

相关文章:

  • 时域抽样定理,信号重建,附带频域抽样定理
  • OA系统流程效率改进方案
  • Java:81-RabbitMQ详解
  • “绿坝—花季护航”使用全攻略
  • 鬼影病毒学习总结
  • js复制URL链接
  • response.setContentType()和response.setCharacterEncoding()使用区别及统一处理request和response编码
  • python 网盘搭建_超简单!基于Python搭建个人“云盘”
  • 【MFC】Ribbon界面开发(一)
  • 刷机介绍----超详细
  • 公司内部邮件格式范文
  • SpringBoot -- 软件许可(License)证书生成+验证+应用完整流程
  • 手把手教你安装 Fedora
  • 计算机系列之排序算法
  • 2021年高考成绩查询宜春昌黎,2021年全国各省高考成绩排名查询系统入口
  • DIV简单个人静态HTML网页设计作品 WEB静态个人介绍网页模板代码 DW个人网站制作成品 期末网页制作与实现
  • Ubuntu下MPlayer(万能播放器)的使用
  • 利用百度API获取mp3及歌词lrc下载地址
  • 最全的Gateway统一网关快速入门
  • Java中的方法递归
  • HDL FPGA 学习 - Avlon 总线,从端口传输、主端口传输,单周期、可变周期传输
  • 盘点那些免费的AI对话工具(国内篇):国内TOP3 AI聊天机器人产品介绍
  • Spring ResourceLoader.getResource() getResources()的理解
  • 史上最全最新Ubuntu安装教程(图文)
  • ECshop 模板制作教程
  • sql2000数据库挂起问题
  • physxloader.dll x86_physxloader.dll
  • C语言-常用数学函数
  • HTML+HTML5基础教程_笔记
  • ChinaSoft 论坛巡礼 | 移动软件工程论坛