k8s+jenkins(DevOps全流程)
k8s集群搭建是参照别人的,链接找不到了。需要5台机器,3主2从,主最少搭建3台才能实现高可用。
流程jenkins打包代码 >> 把打包代码生成镜像 >> 备份镜像库旧镜像 >> 新镜像上传镜像库 >> k8s去镜像库拉取镜像 >> 运行yaml文件生成更新服务(jenkins执行的脚本和yaml文件都是文章下面)
#关闭firewall
systemctl disable firewalld
systemctl stop firewalld
setenforce 0 #临时关闭selinux
#永久关闭selinux去配置文件中/etc/sysconfig/selinux
hostnamectl set-hostname master1 #修改主机名,每台服务器都不一样
#配置hosts文件
cat /etc/hosts
192.168.51.213 master1
192.168.51.214 master2
192.168.51.211 node1
192.168.51.212 node2
#master1配置无密码登录(只有master1机器需要这步)
ssh-keygen -t rsa
ssh-copy-id master2
ssh-copy-id node1
ssh-copy-id node2
#开启转发
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_nonlocal_bind = 1
net.ipv4.ip_forward = 1
vm.swappiness=0
EOF
sysctl --system
#禁用交换分区
swapoff -a
#同步时间
ntpdate ntp1.aliyun.com
#安装启用ipvs作为转发工具
cat > /etc/sysconfig/modules/ipvs.modules <<EOFmodprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4
#修改阿里云yum源
cat << EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
wget http://mirrors.aliyun.com/repo/Centos-7.repo -O /etc/yum.repos.d/CentOS-Base.repo
wget http://mirrors.aliyun.com/repo/epel-7.repo -O /etc/yum.repos.d/epel.repo
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
#安装配置keeplived和haproxy(只有2台master需要)
yum install -y keepalived haproxy
#修改keepalived配置文件master1的priority为100,node-02的priority为90,其他配置一样
cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
liumingtao@gxcards.com
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_1
}
vrrp_instance VI_1 {
state MASTER
interface ens192
lvs_sync_daemon_inteface ens192
virtual_router_id 88
advert_int 1
priority 100
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.51.210/24
}
}
#修改haproxy的配置文件,配置一样
cat /etc/haproxy/haproxy.cfg
global
chroot /var/lib/haproxy
daemon
group haproxy
user haproxy
log 127.0.0.1:514 local0 warning
pidfile /var/lib/haproxy.pid
maxconn 20000
spread-checks 3
nbproc 8
defaults
log global
mode tcp
retries 3
option redispatch
listen https-apiserver
bind 192.168.51.210:8443
mode tcp
balance roundrobin
timeout server 15s
timeout connect 15s
server apiserver01 192.168.51.213:6443 check port 6443 inter 5000 fall 5
server apiserver02 192.168.51.214:6443 check port 6443 inter 5000 fall 5
#启用keepalived和haproxy
systemctl enable keepalived && systemctl start keepalived
systemctl enable haproxy && systemctl start haproxy
#安装k8s相关组件(4台都需要)
yum install -y kubelet kubeadm kubectl ipvsadm ipset docker-ce
#启动docker
systemctl enable docker && systemctl start docker
#设置kubelet开机自启动
systemctl enable kubelet
#把集群默认配置生成为配置文件并做修改(只有master1需要此操作)
kubeadm config print init-defaults > kubeadm-init.yaml
cat kubeadm-init.yaml
#修改了advertiseAddress为master1的ip,controlPlaneEndpoint为192.168.51.210:8443,imageRepository修改为registry.cn-hangzhou.aliyuncs.com/google_containers用于在阿里云拉取镜像。podSubnet添加了ip10.244.0.0/16,这个用于flannel网络,不设置或设置错flannel不会安装成功。最后加3行,修改为ipvs转发模式
apiVersion: kubeadm.k8s.io/v1beta1
bootstrapTokens:
- groups:
- system:bootstrappers:kubeadm:default-node-token
token: abcdef.0123456789abcdef
ttl: 24h0m0s
usages:
- signing
- authentication
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: 192.168.51.213
bindPort: 6443
nodeRegistration:
criSocket: /var/run/dockershim.sock
name: master1
taints:
- effect: NoSchedule
key: node-role.kubernetes.io/master
---
apiServer:
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta1
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controlPlaneEndpoint: "192.168.51.210:8443"
controllerManager: {}
dns:
type: CoreDNS
etcd:
local:
dataDir: /var/lib/etcd
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: v1.14.0
networking:
dnsDomain: cluster.local
podSubnet: "10.244.0.0/16"
serviceSubnet: 10.96.0.0/12
scheduler: {}
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: "ipvs"
#拉取集群所需要镜像(master1操作)
kubeadm config images pull --config kubeadm-init.yaml
#初始化集群
kubeadm init --config kubeadm-init.yaml
#安装集群命令(master1操作)
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
#执行此脚本把master1证书拷贝到master2上
USER=root
CONTROL_PLANE_IPS="master2"
for host in ${CONTROL_PLANE_IPS}; do
ssh "${USER}"@$host "mkdir -p /etc/kubernetes/pki/etcd"
scp /etc/kubernetes/pki/ca.* "${USER}"@$host:/etc/kubernetes/pki/
scp /etc/kubernetes/pki/sa.* "${USER}"@$host:/etc/kubernetes/pki/
scp /etc/kubernetes/pki/front-proxy-ca.* "${USER}"@$host:/etc/kubernetes/pki/
scp /etc/kubernetes/pki/etcd/ca.* "${USER}"@$host:/etc/kubernetes/pki/etcd/
scp /etc/kubernetes/admin.conf "${USER}"@$host:/etc/kubernetes/
done
#master1初始化集群后生成2条命令类似
kubeadm join 192.168.51.210:8443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:c8195afaff02deb8f263d59e81a6abf0efaf52d799df07e555d221e9b0feb301 --experimental-control-plane --ignore-preflight-errors=all #这条在master2上执行,执行时间很慢耐心等待
#master2命令执行完后安装集群命令工具
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubeadm join 192.168.51.210:8443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:c8195afaff02deb8f263d59e81a6abf0efaf52d799df07e555d221e9b0feb301 #这条在node的2个节点执行,执行时间快
#安装网络攻击
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml (master1上执行)
#执行命令查看所有的节点有没有加入集群
kubectl get nodes
#执行命令查看安装的k8s组件是否成功(所有STATUS都是Runnig)
kubectl get pod -n kube-system
#执行命令查看集群网络是否正常
ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.96.0.1:443 rr
-> 192.168.51.213:6443 Masq 1 0 0
-> 192.168.51.214:6443 Masq 1 1 0
TCP 10.96.0.10:53 rr
-> 10.244.1.2:53 Masq 1 0 0
-> 10.244.1.3:53 Masq 1 0 0
TCP 10.96.0.10:9153 rr
-> 10.244.1.2:9153 Masq 1 0 0
-> 10.244.1.3:9153 Masq 1 0 0
UDP 10.96.0.10:53 rr
-> 10.244.1.2:53 Masq 1 0 0
-> 10.244.1.3:53 Masq 1 0 0
# ---完-----
jenkins拉取打包代码后,执行的脚本
#!/bin/bash
##编写dockerfile,把jar包导入docker镜像
cat <<EOF>>/var/lib/jenkins/workspace/app-web-user/Dockerfile
FROM centos7-java-webuser
RUN mkdir -p /app/web-user/
COPY default/web-user/target/app-web-user.jar /app/web-user/
EXPOSE 12220
EXPOSE 13220
WORKDIR /app/web-user/
ENTRYPOINT ["/usr/local/java/jdk1.8.0_101/bin/java","-Dsun.misc.URLClassPath.disableJarChecking=true -Xmx128M -Xms128M -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=12220","-jar","app-web-user.jar"]
EOF
##定义镜像后缀时间
DATE=`date +%y%m%d%H%M`
cd /var/lib/jenkins/workspace/app-web-user
##利用dockerfile生成docker镜像
docker build -t 192.168.51.211:5000\/webuser_$DATE .
##将镜像导入本地私有镜像库
docker push 192.168.51.211:5000\/webuser_$DATE
###修改启动容器镜像为最新版本
sed -i "14s/.*/ image: 192.168.51.211:5000\/webuser_$DATE/g" /k8s/web-user/web-user-pod.yaml
###k8s利用最新镜像启动docker容器
/usr/bin/kubectl apply -f /k8s/web-user/
k8s应用的yaml文件
cd /k8s/web-user/
cat web-user-pod.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: web-user
spec:
replicas: 2
template:
metadata:
labels:
app: web-user
spec:
containers:
- name: web-user
image: 192.168.51.211:5000/webuser_1908211449
ports:
- containerPort: 13220
cat web-user-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: web-user
spec:
ports:
- name: web-user-svc
port: 13220
targetPort: 13220
nodePort: 32221
selector:
app: web-user
type: NodePort
k8s+jenkins(DevOps全流程)的更多相关文章
- 如何使用 CODING 实践 DevOps 全流程
你好,欢迎使用 CODING!这份最佳实践将帮助你通过 CODING 研发管理系统来更好地实践 DevOps 流程. DevOps 的本质是打破各个部门之间的隔阂,打通企业的前中后台,推进跨部门协作. ...
- centos7搭建sonarqube环境+jenkins部署全流程
一.简介sonarqube是一个用于代码质量管理的开源平台,用于管理源代码的质量 不遵循代码标准sonar可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具规范代码编写.潜在的 ...
- AI全流程开发难题破解之钥
摘要:通过对ModelArts.盘古大模型.ModelBox产品技术的解读,帮助开发者更好的了解AI开发生产线. 本文分享自华为云社区<[大厂内参]第16期:华为云AI开发生产线,破解AI全流程 ...
- 基于Jenkins的开发测试全流程持续集成实践
今年一直在公司实践CI,本文将近半年来的一些实践总结一下,可能不太完善或优美,但的确初步解决了我目前所在项目组的一些痛点.当然这仅是一家之言也不够完整,后续还会深入实践和引入Kubernetes进行容 ...
- 十分钟 CODING DevOps 全链路体验
近期 CODING 团队在 2019 KubeCon 大会上发布 DevOps 一站式解决方案:CODING 2.0.此次 CODING 全新上线了持续集成与制品库模块,通过自动化与标准化的方式来帮助 ...
- canvas 制作flappy bird(像素小鸟)全流程
flappy bird制作全流程: 一.前言 像素小鸟这个简单的游戏于2014年在网络上爆红,游戏上线一段时间内appleStore上的下载量一度达到5000万次,风靡一时, 近年来移动web的普及为 ...
- 全球首个全流程跨平台界面开发套件,PowerUI分析
一. 首个全流程跨平台界面开发套件,PowerUI正式发布 UIPower在DirectUI的基础上,自主研发全球首个全流程跨平台界面开发套件PowerUI(PUI)正式发布,PowerU ...
- 【Heritrix基础教程之4】开始一个爬虫抓取的全流程代码分析
在创建一个job后,就要开始job的运行,运行的全流程如下: 1.在界面上启动job 2.index.jsp 查看上述页面对应的源代码 <a href='"+request.getCo ...
- K8s+jenkins实现提升效率 —— 一些小记录
尝试下K8s + jenkins的组合,非常方便.在这里记录一下: kubernetes版本: 1.10 + deployment.yaml apiVersion: v1 kind: Service ...
随机推荐
- m0n0防火墙安装配置方法
m0n0防火墙安装配置方法 准备工具: vmware虚拟机 m0n0防火墙安装镜像:M0n0Wall - generic-pc-1.8.1.iso 桥接网卡ip:192.168.43.0/24 hos ...
- django 补充 QuerySet数据类型
1 QuerySet数据类型 特点: (1) 可切片 Entry.objects.all()[:5] (2) 可迭代 : articleLis ...
- eclipse export runnable jar(导出可执行jar包) runnable jar可以执行的
如果要导出可运行的JAR文件,需要选择Runnable Jar File. 1. 选择要到处JAR文件的工程,右键选择“Export”: 2. 选择“Java-->Runnable JAR fi ...
- js日志组件封装
js日志组件~~ 1 function Logger(level) { if (!(this instanceof Logger)) { return new Logger(); } var ERRO ...
- 在jsp页面中通过struts的标签<s:if>来判断选择显示控件
<s:iterator value="#request.users" var="u"> <!-- 判断该条评论的评论人是不是查看这篇评论的用户 ...
- Ubuntu-tools安装
1.tools灰色 2.虚拟机→→安装VMware Tools 跳到压缩包文件:VMwareTools-10.3.2-9925305.tar.gz 任意复制到某个路径,如桌面 打开终端,cd进入文件所 ...
- W5500 学习开发: W5500学习说明
前言 官方已经给了大部分的例子,我只是做一下移植说明 这一节看一下如何移植官网程序的DHCP 首先先明确:单片机和W5500通信是通过SPI,所有的数据都是通过SPI接收和发送, 所以,拿到官方源码只 ...
- 【LG5444】[APIO2019]奇怪装置
[LG5444][APIO2019]奇怪装置 题面 洛谷 题目大意: 给定\(A,B\),对于\(\forall t\in \mathbb N\),有二元组\((x,y)=((t+\lfloor\fr ...
- sql server 2016 AlwaysOn实现无域高可用全教程
一.简介环境:小编使用的服务器是windows server 2016(系统服务器) + sql server 2016(数据库服务器)(windows server 2016 + sql serve ...
- [BZOJ2186]沙拉公主的困惑
[BZOJ2186]沙拉公主的困惑 题面 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M!互质的钞票.房地产第一大户沙拉公主决定 ...