前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >超强K8s服务编排指南,快来围观!

超强K8s服务编排指南,快来围观!

作者头像
Wu_Candy
发布2022-07-05 14:40:46
3780
发布2022-07-05 14:40:46
举报
文章被收录于专栏:无量测试之道
前置说明

k8s_host=192.168.214.50 #定义k8s_host变量,此ip为k8s管理机

yaml_host=192.168.214.100:9999 #相关服务的配置存放机

操作步骤

Step1: 登录100 jenkins 的机器

该机器是有初始化相关脚本的机器,且与k8s机器互相免密访问

Step2: 初始化项目信息

进入目录:/opt/scripts

执行命令:sh init-yaml.sh test backends

[root@localhost scripts]# more init-yaml.sh

代码语言:javascript
复制
#!/bin/bash
ns=$1  //命名空间
app=$2 //对应的服务名称
yaml=/opt/scripts/yaml  //定义一个目录变更
mkdir -p $yaml/$ns/$app/properties  //创建目录
touch $yaml/$ns/$app/deploy.yaml //创建文件
cat $yaml/_/deploy_template.yaml | sed  "s/_NAMESPACE_/$ns/g" | sed  "s/_APPNAME_/$app/g" > $yaml/$ns/$app/deploy_template.yaml  //先替换再生成一个新的deployment 的yaml文件
cat $yaml/_/svc.yaml | sed  "s/_NAMESPACE_/$ns/g" | sed  "s/_APPNAME_/$app/g" > $yaml/$ns/$app/svc.yaml //先替换再生成一个新的service 的yaml 文件
tree $yaml/$ns/$app  //以树结构输出出来

Step3: 初始化 Service 信息

进入目录:/opt/scripts

执行命令:sh init-service.sh test backends

[root@localhost scripts]# more init-service.sh

代码语言:javascript
复制
#!/bin/bash
ns=$1 //命名空间
app=$2 //对应的服务名称
kubectl='kubectl --kubeconfig=/etc/kubernetes/kubelet.kubeconfig'  //定义了一个kubectl命令变更
ssh root@192.168.214.50 "$kubectl apply -f http://192.168.214.100:9999/$ns/$app/svc.yaml"  //跳转到50这台k8s的管理机上,为服务生成service服务代理

注意:

k8s分配给 Service一个固定IP,这是一个虚拟IP(也称为ClusterIP),并不是一个真实存在的IP,而是由k8s虚拟出来的。

虚拟IP的范围通过k8s API Server的启动参数 --service-cluster-ip-range=19.254.0.0/16配置;

虚拟IP属于k8s内部的虚拟网络,外部是寻址不到的。

在k8s系统中,实际上是由k8s Proxy组件负责实现虚拟IP路由和转发的,所以k8s Node中都必须运行了k8s Proxy,从而在容器覆盖网络之上又实现了k8s层级的虚拟转发网络。

Step4: 调整配置信息

代码语言:javascript
复制
[root@localhost backend]# pwd
/opt/scripts/yaml/test/backends
代码语言:javascript
复制
[root@localhost backends]# tree
.
├── deploy_template.yaml
├── deploy.yaml
├── properties
│   ├── logback.xml
│   └── sysconfigs
│       └── zk.properties
└── svc.yaml

2 directories, 5 files
代码语言:javascript
复制
cd /opt/script/yaml/test/backends

配置文件pro和svc.yaml:

从原机器/opt/data/msgback-release/ROOT/WEB-INF/classes 拷贝此目录下的内容到/opt/scripts/yaml/test/backends 此目录下来,修改zk 配置地址信息

修改在svc.yaml 此文件中修改配置的端口信息

Step5: jenkins调用 k8s 做服务部署到 k8s集群中去

代码语言:javascript
复制
jenkins_job: 编译代码并生成镜像,且上传到镜像仓库
代码语言:javascript
复制
namespace='test'  #定义一个变量
代码语言:javascript
复制
mvn clean install -DskipTests -U  #进行代码的编译,跳过测试,-U强制更新
代码语言:javascript
复制
cd ./test-deployer-cluster/target  #编译完成后,此目录下会生成一个test【项目】的目录
代码语言:javascript
复制
rm -rf ./test/conf/sysconfigs  #将生成项目目录的配置信息全部清除掉,因为我们需要替换
cp -af /opt/scripts/yaml/test/test-model/properties/sysconfigs/* ./test/conf/sysconfigs  #此处就是拿我们自己的配置放入到sysconfigs(项目配置文件存放处)目录下
代码语言:javascript
复制
echo '
cd /opt/test/bin/
dos2unix -k startup.sh  #转换文件的格式为unix,避免启动时报文件错误
sh startup.sh&  #启动服务
tail -f /var/log/yum.log #打印日志,表明服务是存活的
'> ./start.sh   #生成一个启动脚本,存放的目录是为 --> cd ./test-deployer-cluster/target
代码语言:javascript
复制
echo '
FROM ult.harbor.com/base/java:v4-skyagent
ENV TZ=Asia/Shanghai  //定义时区
ENV LANG en_US.UTF-8 //定义字符集
ENV LANGUAGE en_US:en //定义语言
ADD ./test /opt/test //追加test目录到镜像中
ADD ./start.sh /opt/test/  //追加启动脚本到镜像中
CMD ["sh","/opt/test/start.sh"] //镜像启动时执行的命令
' > Dockerfile  //生成一个Dockerfile文件 ,下面脚本会使用这个文件生成镜像
代码语言:javascript
复制
docker build -t ult.harbor.com/$namespace/test-model:${branch}-${BUILD_NUMBER} .   //${branch}-${BUILD_NUMBER}为jenkins自动生成的一个变量
代码语言:javascript
复制
docker push ult.harbor.com/$namespace/test-model:${branch}-${BUILD_NUMBER}   //将上面命令生成的镜像上传到镜像仓库中,供部署时使用
代码语言:javascript
复制
jenkins_job: 调用k8s将镜像运行进来,生成容器
代码语言:javascript
复制
/opt/scripts/install-app.sh test test-model ${version}  //${version} 为jenkins 部署时传入的一个变量

more /opt/scripts/install-app.sh 如下所示:

代码语言:javascript
复制
[root@localhost ~]# more /opt/scripts/install-app.sh
ns=$1    //脚本接收的第一个参数
app=$2  //脚本接收的第二个参数
version=$3 //脚本接收的第三个参数
k8s_host=192.168.214.50 //定义k8s_host变量,此ip为k8s管理机
yaml_host=192.168.214.100:9999 //配置存放处
yaml_path=/opt/scripts/yaml/$ns/$app //定义一个路径变量
echo install : ns=$ns , app=$app , version=$version //输出信息
cat $yaml_path/deploy_template.yaml | sed "s/VERSION/$version/g" > $yaml_path/deploy.yaml  //替换部署脚本里面的版本号【k8s里面的deploy】
echo -------------replace deploy-------------//输出信息
cat $yaml_path/deploy.yaml //查看信息
echo -------------svc info-------------//输出信息
cat $yaml_path/svc.yaml //查看信息
echo -------------call k8s-------------//输出信息
kubectl='kubectl --kubeconfig=/etc/kubernetes/kubelet.kubeconfig' //定义kubectl命令变量
ssh root@$k8s_host "$kubectl delete -f http://$yaml_host/$ns/$app/deploy.yaml"  //删除已存在的容器
ssh root@$k8s_host "$kubectl create -f http://$yaml_host/$ns/$app/deploy.yaml"  //创建一个新的容器
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 无量测试之道 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前置说明
  • 操作步骤
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档