网站首页 > 技术文章 正文
前置说明:
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
#!/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
#!/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.调整配置信息:
[root@localhost backend]# pwd
/opt/scripts/yaml/test/backends
[root@localhost backends]# tree
.
├── deploy_template.yaml
├── deploy.yaml
├── properties
│ ├── logback.xml
│ └── sysconfigs
│ └── zk.properties
└── svc.yaml
2 directories, 5 files
#cd /opt/script/yaml/test/backends
配置文件pro and svc.yaml→ 从原机器/opt/data/msgback-release/ROOT/WEB-INF/classes 拷贝此目录下的内容到/opt/scripts/yaml/test/backends 此目录下来,修改zk 配置地址信息
修改在svc.yaml 此文件中修改配置的端口信息
step5.Jenkins调用k8s做服务部署到K8s集群中去
jenkins_job: 编译代码并生成镜像,且上传到镜像仓库
namespace='test' //定义一个变量
mvn clean install -DskipTests -U //进行代码的编译,跳过测试,-U强制更新
cd ./test-deployer-cluster/target //编译完成后,此目录下会生成一个test【项目】的目录
rm -rf ./test/conf/sysconfigs //将生成项目目录的配置信息全部清除掉,因为我们需要替换
cp -af /opt/scripts/yaml/test/test-model/properties/sysconfigs/* ./test/conf/sysconfigs
//此处就是拿我们自己的配置放入到sysconfigs【项目配置文件存放处】目录下
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
echo 'FROM ult.harbor.com/base/java:v4-skyagentENV
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文件 ,下面脚本会使用这个文件生成镜像
docker build -t ult.harbor.com/$namespace/test-model:${branch}-${BUILD_NUMBER} .
//${branch}-${BUILD_NUMBER}为jenkins自动生成的一个变量
docker push ult.harbor.com/$namespace/test-model:${branch}-${BUILD_NUMBER}
//将上面命令生成的镜像上传到镜像仓库中,供部署时使用
jenkins_job:调用k8s 将镜像运行进来,生成容器
/opt/scripts/install-app.sh test test-model ${version} //${version} 为jenkins 部署时传入的一个变量
#more /opt/scripts/install-app.sh 如下所示:
[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"
//创建一个新的容器
猜你喜欢
- 2024-10-12 Kong 优雅实现微服务网关鉴权,登录场景落地实战篇
- 2024-10-12 k8s安装与使用入门(k8s安装步骤)
- 2024-10-12 应用无损上下线(应用无损上下线怎么关闭)
- 2024-10-12 另一个Kubernetes(k8s)指南(kubernetesk8s怎么使用)
- 2024-10-12 Kubernetes 安全专家(CKS)必过心得
- 2024-10-12 深入理解K8S网络原理上(k8s网络解决方案)
- 2024-10-12 一次客户需求引发的K8S网络探究(基于客户需求)
- 2024-10-12 今天讲讲k8s的pod控制器及无状态和有状态
- 2024-10-12 k8s如何滚动升级应用(k8s升级组件方法)
- 2024-10-12 k8s基础知识之service类型(k8s的service类型)
- 02-21走进git时代, 你该怎么玩?_gits
- 02-21GitHub是什么?它可不仅仅是云中的Git版本控制器
- 02-21Git常用操作总结_git基本用法
- 02-21为什么互联网巨头使用Git而放弃SVN?(含核心命令与原理)
- 02-21Git 高级用法,喜欢就拿去用_git基本用法
- 02-21Git常用命令和Git团队使用规范指南
- 02-21总结几个常用的Git命令的使用方法
- 02-21Git工作原理和常用指令_git原理详解
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)