Linux运维知识之Kubernetes 持续集成 SpringCloud
小标 2019-03-15 来源 : 阅读 1343 评论 0

摘要:本文主要向大家介绍了Linux运维知识之Kubernetes 持续集成 SpringCloud,通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助。

本文主要向大家介绍了Linux运维知识之Kubernetes 持续集成 SpringCloud,通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助。

Linux运维知识之Kubernetes 持续集成 SpringCloud

写在开始之前


在开始之前我们需要了解几个概念:


1.什么是持续集成?


持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽快地发现集成错误。许多团队发现这个过程可以大大减少集成的问题,让团队能够更快的开发内聚的软件。


2.什么是 kubernetes?


Kubernetes 是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes 的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes 提供了应用部署,规划,更新,维护的一种机制。


3.什么是 SpringCloud?


Spring Cloud 是一系列框架的有序集合。它利用 Spring Boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用 Spring Boot 的开发风格做到一键启动和部署。


通过以上几个概念我们简单了解了 kubernetes 等技术是干什么的,其他的具体我们这里不做赘述,大家可以到其官方网站进行了解。我们这里只教会大家如何利用这些工具或技术来实现我们应用的可持续集成到不同的环境中。那么就让我开始实践吧!


我们先来看看实现这个持续集成的流水线:



  • 开发人员提交代码 Gitlab 远程触发 Jenkins 构建


  • Jenkins 构建镜像推送到私有仓库


  • Jenkins 将最新的镜像部署到 k8s 中


  • 将部署反馈发送给用户



一、实验环境概览


这里推荐大家使用 VMware 安装虚拟机,Centos 7 系统,所有操作都在 root 用户下进行。


以下内容将以 IP 区分各个虚拟机。


二、 虚拟机和必要软件安装


1. 虚拟机的安装与配置


这里安装虚拟机按照 VMware 的指示一步步安装配置虚拟机的内存和硬盘即可,重点教大家如何配置虚拟机的网卡和固定 IP,如果不配置固定 IP 虚拟机重启之后自动分配 IP 会导致 kubernetes 集群崩掉无法访问以及各种各样的问题。


注意:安装虚拟机的时候网络适配器要选择 NAT 模式(N):用于共享主机的 IP 地址。


1.1 网卡配置


第一步、打开虚拟网络编辑器


第二步、获得管理员权限



第三步、这里一定要按照图中这样配置


第四步、这一步可有可无,默认配置也没问题


1.2 为各个虚拟机分配静态 IP


# 1. 修改网络配置文件
vi /etc/sysconfig/network-scripts/ifcfg-ens33

# 2. 把BOOTPROTO="dhcp"修改为BOOTPROTO="static"

# 3. 在末尾添加如下内容:
IPADDR=192.168.1.11
NETMASK=255.255.255.0
GATEWAY=192.168.1.2
DNS1=114.114.114.114



  • IPADDR 是你为此虚拟机分配的静态 IP




  • NETMASK 子网掩码,在第三步图中获取




  • GATEWAY 网关,在第三步图中点击 NAT 设置 获取




  • DNS 使用 114.114.114.114 即可




# 4. 重启网络服务
service network restart

# 5.验证设置
## 验证是否能连接外网
ping baidu.com

## 查看ip
ip addr


2. 安装一些必要的工具以及一些通用配置


在所有机器上进行如下操作:


# 1. 安装常用软件
yum -y install vim wget

# 2.安装 Docker
## v1.11.x版本推荐使用docker v17.03 更高的版本可能无法正常运行

### 2.1 安装依赖包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

### 2.2 设置阿里云镜像源
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

### 2.3 安装指定版本的Docker
yum install -y --setopt=obsoletes=0 docker-ce-17.03.2.ce-1.el7.centos.x86_64 docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch

### 2.4 设置Docker开机自启并启动
sudo systemctl enable docker && sudo systemctl start docker


2.5 配置 Docker 加速器


配置阿里云加速器。


# 3. 通用配置
## 3.1 关闭防火墙
systemctl stop firewalld && systemctl disable firewalld

## 3.2 配置host解析
cat >>/etc/hosts<<EOF
192.168.1.11 k8s-master
192.168.1.12 k8s-slave1
192.168.1.13 k8s-slave2
192.168.1.101 hub.k8s.com
EOF

## 3.3 设置每个机器的hostname
hostnamectl --static set-hostname {hostname}


注意:配置host解析的时候我们添加了Docker私库的ip解析。


三、搭建 Docker 私有仓库:Harbor(192.168.1.101)


1. 安装 Docker-compose


# 1.安装Docker-compose
sudo curl -L https://github.com/docker/compose/releases/download/1.18.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

#赋予Docker-compose执行权限
sudo chmod +x /usr/local/bin/docker-compose

#验证Docker-compose
docker-compose --version


2. 安装 Harbor


# 1. 下载安装文件(可以在指定目录下载)
wget https://storage.googleapis.com/harbor-releases/harbor-online-installer-v1.5.2.tgz

# 2. 解压下载的文件
tar xvf harbor-online-installer-v1.5.2.tgz


3. 配置 Harbor


1. 修改Harbor的配置文件
cd harbor
vim harbor.cfg

内容如下:

# hostname设置访问地址,可以使用ip、域名,不可以设置为127.0.0.1或localhost
hostname = hub.k8s.com

# 访问协议,默认是http,也可以设置https,如果设置https,则nginx ssl需要设置on
ui_url_protocol = http

# mysql数据库root用户默认密码root123,实际使用时修改下
db_password = root@1234

max_job_workers = 3
customize_crt = on
ssl_cert = /data/cert/server.crt
ssl_cert_key = /data/cert/server.key
secretkey_path = /data
admiral_url = NA

# 邮件设置,发送重置密码邮件时使用
email_identity =
email_server = smtp.mydomain.com
email_server_port = 25
email_username = sample_admin@mydomain.com
email_password = abc
email_from = admin <sample_admin@mydomain.com>
email_ssl = false

# 启动Harbor后,管理员UI登录的密码,默认是Harbor12345
harbor_admin_password = root@1234

# 认证方式,这里支持多种认证方式,如LADP、本次存储、数据库认证。默认是db_auth,mysql数据库认证
auth_mode = db_auth

# LDAP认证时配置项
#ldap_url = ldaps://ldap.mydomain.com
#ldap_searchdn = uid=searchuser,ou=people,dc=mydomain,dc=com
#ldap_search_pwd = password
#ldap_basedn = ou=people,dc=mydomain,dc=com
#ldap_filter = (objectClass=person)
#ldap_uid = uid
#ldap_scope = 3
#ldap_timeout = 5

# 是否开启自注册
self_registration = on

# Token有效时间,默认30分钟
token_expiration = 30

# 用户创建项目权限控制,默认是everyone(所有人),也可以设置为adminonly(只能管理员)
project_creation_restriction = everyone

verify_remote_cert = on


4.启动 Harbor


# 1.在当前安装目录下
./install.sh


5.访问 Harbor 以及一些常用操作


配置宿主机对 Docker 私有仓库镜像IP的解析,编辑 C:\WINDOWS\System32\drivers\etc\hosts 文件


添加如下内容:


192.168.1.101 hub.k8s.com


这样我们在宿主机直接访问 hub.k8s.com 就可以看到Docker私库的可视化界面。


默认用户就是 admin,密码就是我们在配置文件里配置的 root@1234


我们可以新建一个项目,把和这个项目相关的镜像都推送到这个项目里,我们也可以根据项目来区分我们不同环境的镜像。例如:我的项目叫 k8s-pig,那么在 Harbor 中我们新创建一个项目叫 k8s-pig-prod 用来存放生产环境的镜像,新创建一个项目叫 k8s-pig-dev 用来存放开发环境的镜像,以及在后面我们持续集成时可以指定使用什么环境的镜像。这个我们后面再详细的讲。


我们可以点推送镜像来复制命令


进到项目的某一个模块镜像列表页面我们可以查看这个模块打包镜像的各个版本,并且可以复制 pull 镜像的命令


以下是重点!!!


我们已经完成了 Docker 私有仓库的搭建了,是不是我们就能向私库李推送镜像了?


答案显然是不能的!!!


那么我们就来解决一下这个问题,在所有机器进行如下操作(本机也需要):


1.修改 Docker 的 daemon.json 文件


vim /etc/docker/daemon.json

# 添加如下内容:
"insecure-registries":["hub.k8s.com"]

# 重启服务
systemctl restart docker


注意:不要忘记添加内容之前加个逗号


2.docker 登录到 Harbor


docker login hub.k8s.com
#输入用户名密码即可(admin/root@1234)


3.小试牛刀


# 1. 拉取docker hub的公共镜像
docker pull gitlab/gitlab-ce
# 2. 标记本地镜像,将其归入某一仓库
docker tag gitlab/gitlab-ce hub.k8s.com/k8s-pig/gitlab
# 3. 推送镜像到私有仓库
docker push hub.k8s.com/k8s-pig/gitlab
# 4. 从私有仓库pull我们的镜像
docker pull hub.k8s.com/k8s-pig/gitlab


登录到 harbor 可视化界面就可以看到我们刚刚推送的镜像。


四、搭建代码托管服务:GitLab(192.168.1.100)


GitLab 是一个用于仓库管理系统的开源项目,使用 Git 作为代码管理工具,并在此基础上搭建起来的 web 服务。


其实,基于 Docker 安装 Gitlab 十分简单,下面就让我们搭建 Gitlab 服务,并配置邮件服务。


1. 搭建 Gitlab 服务


# 1. pull镜像,这个镜像就是我们前面小试牛刀时推送到私有仓库的镜像
docker pull hub.k8s.com/k8s-pig/gitlab

# 2. 运行Gitlab镜像
docker run -d -h gitlab.cn  -p 8443:443 -p 80:80 -p 2222:22 -p 9090:9090 --name gitlab --restart always -v /soft/gitlab/config:/etc/gitlab -v /soft/gitlab/logs:/var/log/gitlab -v /soft/gitlab/data:/var/opt/gitlab hub.k8s.com/k8s-pig/gitlab



  • -h:通过gitlab.cn域名访问容器


  • -v:将配置文件、日志、数据持久化


  • -p:容器端口映射到本机端口


  • --name:容器名称


  • --restart:容器重启



注意:这里的 --restart 在 gitlab 容器上并不会启动成功,如果我们的虚拟机关机了,那么我们只能把容器删除了,重启启动,不用担心数据丢失,因为我们已经把数据持久化了,具体什么原因,大家可重启一下 gitlab 容器去看一下容器的日志。


2. 配置邮件服务


我这里用的 QQ 的 smtp 服务,大家可以自己百度一下如何开启 QQ 的 smtp 服务。


# 1.编辑gitlab的配置文件
vim /soft/gitlab/config/gitlab.rb

# 2.修改我们的clone地址
external_url '//192.168.1.100' #本机IP

# 3.添加如下内容:
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "邮箱地址"
gitlab_rails['smtp_password'] = "认证码"
gitlab_rails['smtp_domain'] = "smtp.qq.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
gitlab_rails['gitlab_email_from'] = '邮箱地址'

# 4.重启Gitlab容器
## 4.1 删除gitlab容器
docker rm -f gitlab
## 4.2 重新运行gitlab容器
docker run -d -h gitlab.cn  -p 8443:443 -p 80:80 -p 2222:22 -p 9090:9090 --name gitlab --restart always -v /soft/gitlab/config:/etc/gitlab -v /soft/gitlab/logs:/var/log/gitlab -v /soft/gitlab/data:/var/opt/gitlab hub.k8s.com/k8s-pig/gitlab


这里的 clone 地址不修改的默认值为 //gitlab.cn。我们用命令行 clone 代码的时候会用问题。


3. 初始化登录


gitlab 的默认用户为 root,超级管理员,我们第一次登录 Gitlab 的时候会让你输入密码作为 root 用户的密码,完成后你就可以在 Gitlab 创建你的项目了。


五、搭建 Jenkins 服务 (192.168.1.11)


Jenkins 是一个开源软件项目,是基于 Java 开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。


我们这里为了简单和少出问题将 Jenkins 服务部署在 k8s-master 节点上,以便我们可以直接在 Jenkins 里使用 kubernetes 的命令行工具,那你就会问了,单节点抗压能力是不是不够啊,这里推荐一种方案也是我实践过的,其实在生产环境中 k8s-master 都是需要高可用的,所以 k8s-master 至少要部署三个节点(奇数个),Jenkins 也可以集群部署,这样我们在每一个 k8s-master 节点上部署 Jenkins 选一个作为 Jenkins-master 作为 Jenkins 集群的入口这样就解决了单点抗压能力不足的情况。


这只是一种解决方案,你也可以将 Jenkins 部署到 kubernetes 集群中,具体怎么实现这里就不做赘述了(大家如果需要的话可以给我留言看看有多少人需要,我再重新开一个 chat 具体讲讲如何部署 kubernetes 集群高可用和 Jenkins 部署到 kubernetes 集群中),下面我们就来搭建 Jenkins 服务。


1. 环境搭建


安装 Git


yum -y install git


安装 JDK


# 1. 下载JDK文件
cd /usr/
mkdir java && cd java
wget //download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c96a2fad6ed6d1/jdk-8u181-linux-x64.tar.gz

# 2. 解压安装文件
tar -zxvf jdk-8u151-linux-x64.tar.gz

# 3. 添加环境变量

vim /etc/profile
# 在文本最后添加如下内容
export JAVA_HOME=/usr/java/jdk1.8.0_181
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib/dt.JAVA_HOME/lib/tools.jar:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin:${PATH}

# 4.立即生效
source /etc/profile

# 5. 验证安装
java -version


安装 Maven


# 1. 下载安装文件
cd /usr/
mkdir maven && cd maven
wget //mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz

# 2. 解压安装文件
tar -zxvf apache-maven-3.5.4-bin.tar.gz

# 3. 添加环境变量
vim /etc/profile
# 修改为如下内容:
export JAVA_HOME=/usr/java/jdk1.8.0_181
export MAVEN_HOME=/usr/maven/apache-maven-3.5.4
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib/dt.JAVA_HOME/lib/tools.jar:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin:${MAVEN_HOME}/bin:${PATH}

# 4. 立即生效
source /etc/profile

# 5. 验证安装
mvn -version


2. 安装配置 Jenkins


2.1 下载安装文件并运行


# 1. 创建安装目录
cd ~
mkdir /soft/jenkins -p
cd /soft/jenkins

# 2. 下安装文件
wget //mirrors.jenkins.io/war-stable/latest/jenkins.war

# 3. 运行安装文件
nohup java -jar jenkins.war --httpPort=80 >temp.txt &

# 获取登录密码
cat temp.txt


复制以下内容:


2.2 登录并配置


在宿主机上输入 IP:192.168.1.11 访问 Jenkins 然后初始化用户,把我们复制的密码粘贴上,点击继续。


初始化安装插件,过程比较慢,耐心等待即可。


安装完成后就会出现初始化用户页面,大家自己去初始化用户就可以了,然后保存并结束。


初始化完成后就会进入到 Jenkins 的首页,我们后面再详细讲解如何使用 Jenkins。


六、搭建 k8s 集群 (192.168.1.11,192.168.1.12,192.168.1.13)


1. k8s 集群环境初始化设置


如下操作在192.168.1.11,192.168.1.12,192.168.1.13执行


1.1 安装 kubeadm、kubelet、kubectl


# 1. 配置阿里云源
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=0
EOF

# 2. 开始安装
yum -y install kubelet kubeadm kubectl kubernetes-cni

# 3. 启动kubeadm服务
systemctl enable kubelet && systemctl start kubelet

# 4. 下载所需要的镜像
# 创建脚本 images.sh
vim images.sh
# 添加如下内容:
#!/bin/bash
images=(kube-proxy-amd64:v1.11.2 kube-scheduler-amd64:v1.11.2 kube-controller-manager-amd64:v1.11.2 kube-apiserver-amd64:v1.11.2
etcd-amd64:3.2.18 coredns:1.1.3 pause-amd64:3.1 kubernetes-dashboard-amd64:v1.8.3 k8s-dns-sidecar-amd64:1.14.9 k8s-dns-kube-dns-amd64:1.14.9
k8s-dns-dnsmasq-nanny-amd64:1.14.9 )
for imageName in ${images[@]} ; do
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
done
docker tag da86e6ba6ca1 k8s.gcr.io/pause:3.1
# 添加执行权限
chmod -R 777 images.sh
# 拉取所需镜像(耐心等待)
./images.sh

# 5. 关闭 Swap
swapoff -a
# 永久关闭
#要永久禁掉swap分区,打开如下文件注释掉swap那一行
# vim /etc/fstab

# 6. 关闭 SELinux
sed -i 's/SELINUX=permissive/SELINUX=disabled/' /etc/sysconfig/selinux

setenforce 0

# 7. 配置转发参数
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
vm.swappiness=0
EOF

sysctl --system


2. 开始安装 Master节点(192.168.1.11)


2.1 初始化


注意这里--apiserver-cert-extra-sans=后面的IP:192.168.1.11,如果你的和我的不一样要修改成自己的。


kubeadm init --kubernetes-version=v1.11.2 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=0.0.0.0 --apiserver-cert-extra-sans=192.168.1.11,127.0.0.1,k8s-master


初始化完成之后会打印一条命令,例如:


kubeadm join 192.168.1.11:6443 --token udrvwc.nn0ujov1re4ms63j --discovery-token-ca-cert-hash sha256:d6f93d4b2f9efc    

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注系统运维Linux频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程