一、安装docker
另外一篇文章有讲docker的安装与相关配置,暂时就不讲了
1、关闭防火墙并修改主机名
hostnamectl set-hostname k8s-master && bash #修改主机名
systemctl stop firewalld
systemctl disable firewalld
2、永久禁用swap
vi /etc/fstab
#验证是否关闭,swap必须为0
free -g
用#注释掉swap一行(新版centos已经默认禁用)
3、配置镜像加速
到阿里云获取自己镜像加速地址
cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"], ##修改为你的容器加速器地址 登录阿里云点击镜像工具-镜像加速器
4、安装 docker-compose
- 官网找到下载地址
https://github.com/docker/compose/releases 版本地址
我的下载地址
wget https://github.com/docker/compose/releases/download/v2.10.0/docker-compose-linux-x86_64
- 下载后移动至/usr/local/bin/文件夹下 (如果移动不了 就手动移动,记住重命名“docker-compose”)
mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
chmod a+x /usr/local/bin/docker-compose
注意 一定要配置挂载 不然磁盘容易满
- 启动
./install.sh #记住到harbor目录中执行install.sh
我的harbor下载安装的时候在home
进入到harbor命令 可以用 统一停止 和启动所有harbor插件
docker-compose down 关闭
docker-compose up -d 启动
- 测试打包上传到镜像仓库
现在下载一个镜像nginx
docker pull nginx
给镜像打tag
docker tag nginx:latest ip:端口/项目/nginx
上传镜像
docker push ip:端口/项目/nginx
#在linux 拉取gitlab的代码 (尤其在jenkins一定要先通过ssh拉取一次代码)
git clone sshxxxxxxxxxx地址
5、项目配置
- 项目结构
ums-app 为业务处理
ums-api 为api接口
因api包依赖到根项目的pom.xml 所以 打包时 需要将根项目打包,(但不打包ums-app)
排除ums-app 则在 ums-app的pom.xml
<maven.deploy.skip>true</maven.deploy.skip>
-
创建Dockerfile
创建的目录为 app>src>main 因为只构建uniapp
FROM primetoninc/jdk:1.8
LABEL maintainer="wj"
VOLUME /tmp
VOLUME /file
ARG JAR_FILE
RUN echo $JAR_FILE
ADD $JAR_FILE app.jar
RUN sh -c 'touch /app.jar'
EXPOSE 8080
ENV SPRING_PROFILES_ACTIVE=dev
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
- 父项目加载打包插件
<properties>
<docker.repository.releases>192.168.1.8:1180</docker.repository.releases>
<revision>1.0.1-SNAPSHOT</revision>
</properties>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.2.2</version>
<configuration>
<serverId>docker-releases</serverId>
<registryUrl>http://${docker.repository.releases}</registryUrl>
<pushImage>true</pushImage>
<imageName>${docker.repository.releases}/ums/${project.artifactId}:${revision}</imageName>
<!--<dockerHost>http://172.25.6.11:2375</dockerHost>-->
<dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
<buildArgs>
<active>dev</active>
<JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
<rm>true</rm>
<!-- 强制添加标签-->
<forceTags>true</forceTags>
<imageTags>
<imageTag>${revision}</imageTag>
</imageTags>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
- 子项目 ums-app引用
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
</plugin>
二、安装jenkins
1、拉取jenkins镜像
docker pull docker.io/jenkins/jenkins
2、创建文件夹
mkdir -p /home/jenkins
3、权限
chmod 777 /home/jenkins
4、启动
# 注意jdk8的版本 不然可能会
docker run -d -uroot -p 8080:8080 -p 50000:50000 --name jenkins -v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):/usr/bin/docker -v /home/jenkins:/var/jenkins -v /home/jenkins_home:/var/jenkins_home -v /etc/localtime:/etc/localtime jenkins/jenkins
5、打开客户端
http://serverIp:port
6、由于在docker容器 安装的jenkins 所以需要进入容器查看密码
进入容器
docker exec -it jenkins bash
查看密码
cat /var/jenkins_home/secrets/initialAdminPassword
登录后 安装推荐插件
插件安装完成,创建管理员用户
至此,Jenkins安装完成!!!
7、因jenkins会拉取gitlab的代码进行构建,采用ssh的方式则需密钥,然后jenkins在docker容器中 所以需要进入docker容器生成密钥
docker exec -it jenkins bash # 进入docker容器
生成密钥
#注意这里的-m PEM参数,如果没有的话,会生成较新版本的证书,jsch无法识别,后面无法用于ssh登录
ssh-keygen -m PEM -t rsa # 输入后 一直按回车键即可
cd ~/.ssh #进入到jenkins里面的.ssh目录 会看到2个文件 id_rsa id_rsa.pub
id_rsa.pub 为公钥(放到gitlab中的SSH 密钥) id_rsa 为私钥(放到Jenkins凭证)
8、安装插件
所需的插件:
• Maven插件 Maven Integration plugin
• 发布插件 Deploy to container Plugin
• SSH连接 Publish Over SSH
安装过程:
系统管理—>插件管理---->可选插件—>过滤Deploy to container---->勾选—>直接安装
已安装好的插件
9、jenkins配置
-
Dashboard>系统管理>Configure System (如果没有这个配置则需要添加 插件)
同一页面
Jenkins Location 这列需要配置 公网地址
全局属性 这列配置环境变量
配置变量的地址
vi /usr/lib/systemd/system/docker.service
–graph /home/docker docker 挂载目录 不处理磁盘容器满了
配置hosts地址
vi /etc/hosts -
Dashboard>系统管理>全局工具配置 (如果没有这个配置则需要添加 插件)
拉到最下面 我已经装了 所以是应用,没有装的情况是 需要新增一个
选择
maven的版本
名字
进入jenkins 容器配置settings.xml
如执行出现 没有vi命令
#安装命令
apt-get update
apt-get install vim
cd /var/jenkins_home/tools/hudson.tasks.Maven_MavenInstallation/maven3.8.6/conf
修改settings.xml
-
配置jenkins的密钥
密钥为之前在jenkins生成的,id_rsa 为密钥 -
创建maven项目
-
BRANCH_ENV 为变量
-
dev、master 对应的分支名,必须一致
图1:
clean install -DskipTests=true -U docker:build **-D branch_env=${BRANCH_ENV}**
${BRANCH_ENV} jenkins中配置的分支变量 下列图1:
-D branch_env branch_env 为项目中pom.xml变量 下列图2:
图2:
前端构建
记得
插件管理中 安装nodejs插件 和全局工具配置这里选择 NodeJs
执行的shell命令
cd docker
version=$(date "+%Y%m%d%H%M%S")
npm install
npm run build:$BRANCH_ENV
sh build-$BRANCH_ENV.sh $version
echo $PASSWORD docker login xxx:1180 --username $USERNAME --password-stdin # harbor ip:端口
docker push xxx:1180/html/ums-html-$BRANCH_ENV:$version
三、安装Harbor私有镜像仓库
1、下载harbor
wget https://github.com/goharbor/harbor/releases/download/v2.0.6/harbor-offline-installer-v2.0.6.tgz
2、解压下载的harbor
tar -zxvf harbor-offline-installer-v2.0.6.tgz
3、配置harbor
修改harbor.yml文件,如果该文件不存在,则从harbor.yml.tmpl复制一下
hostname: 10.1.1.132 ###修改成自己的主机ip,如果在公网,则添加能访问到该主机的域名
http:
port: 1180 ###默认是80端口,可以修改成自己想设置的端口
harbor_admin_password: 123456 ###修改为你要设置的密码
###并把https注释掉,不然在安装的时候会报错:ERROR:root:Error: The protocol is https but attribute ssl_cert is not set
#https:
#port: 443
#certificate: /your/certificate/path
#private_key: /your/private/key/path
4、配置harbor地址 用于上传镜像
[root@master~]# cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"], ##修改为你的容器加速器地址 登录阿里云点击镜像工具-镜像加速器
"insecure-registries":["10.1.1.132:1180"] ##修改为你的harbor服务器地址和端口
}
5、此时 可以将代码打包成镜像 推送到harbor中了
启动镜像的命令
docker run -d -p 实际访问端口:项目端口 192.168.1.8:1180/project/ums-app
-------------------------------------- 到此 整个构建、上传已经完成 -----------------------------------------
四、K8S搭建
- 如果之前有装过k8s 建议先清理一次
yum remove -y kubelet kubeadm kubectl
kubeadm reset -f
rm -rvf $HOME/.kube
rm -rvf ~/.kube/
rm -rvf /etc/kubernetes/
rm -rvf /etc/systemd/system/kubelet.service.d
rm -rvf /etc/systemd/system/kubelet.service
rm -rvf /usr/bin/kube*
rm -rvf /etc/cni
rm -rvf /opt/cni
rm -rvf /var/lib/etcd
rm -rvf /var/etcd
#杀死运行的容器:
docker kill
#删除所有容器:
docker rm
#强制删除所有镜像:
docker rmi -f
#如果发现还是清除不掉
ps -ef|grep kubelet
#然后再kill -9 id
- 修改主机名称 (之前有处理过 可不用管)
hostnamectl set-hostname k8s-master && bash
- 添加主机的ip (之前有处理过 可不用管)
[root@k8s-master /]# cat /etc/hosts
192.168.1.8 k8s-master
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
185.199.108.133 raw.githubusercontent.com
- 关闭防火墙 (之前有处理过 可不用管)
systemctl stop firewalld
systemctl disable firewalld
- 关闭selinux(之前有处理过 可不用管)
setenforce 0
$ sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
- 关闭swap交换区间(之前有处理过 可不用管)
swapoff -a # 临时
sed -i 's/.*swap.*/#&/' /etc/fstab # 永久
free -g #验证,swap必须为0
- 配置 iptables链路(之前有处理过 可不用管)
$ cat > /etc/sysctl.d/k8s.conf <<EOF
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 10
EOF
# 即时生效
$ sysctl --system
#同步时间
yum install ntpdate -y
ntpdate time.windows.com
- 添加k8s yum源(之前有处理过 可不用管)
$ cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
- 安装kubeadm、kubelet、kubectl
# 安装版本是v1.21.5
yum -y install kubelet-1.21.5-0 kubectl-1.21.5-0 kubeadm-1.21.5-0
systemctl enable kubelet
- 初始化k8s
kubeadm init \
--apiserver-advertise-address 192.168.1.8 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.21.5 \
--service-cidr 10.96.0.0/12 \
--pod-network-cidr 10.244.0.0/16 \
--ignore-preflight-errors all \
--token-ttl 0
kubernetes-version :kubernetes 程序组件的版本号,尽量与安装的 kubelet 版本号相同
image-repository :指定要使用的镜像仓库 默认: gar.io apiserver-advertise-address
:一般为 Master 节点用于集群内通信的IP地址,填主机的网卡IP地址 10.0.4.16,也可以填 0.0.0.0
(这里我自己填的这个) service-cidr :Service 网络的地址范围,其值为 CIDR 格式的网络地址。默认为
10.96.0.0/12 pod-network-cidr :Pod 网络的地址范围,其值为 CIDR 格式的网络地址。通常 Flannel 的网络插件默认值为 10.244.0.0/16 ;Calico 插件的默认值为 192.168.0.0/16
执行kebeadm时 超时异常
error execution phase upload-config/kubelet: Error writing Crisocket information for the control-plane node: timed out waiting for the condition
执行以下语句 然后再执行 kubeadm init
swapoff -a && kubeadm reset && systemctl daemon-reload && systemctl restart kubelet && iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
执行完成后保存以下信息 便于后续加入节点
- 配置kubectl工具
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
- 配置k8s网络插件
#安装calico网络插件
yum install -y ca-certificates
# 获取 calico.yaml
wget https://docs.projectcalico.org/manifests/calico.yaml
sed -i "s#192\.168\.0\.0/16#10\.244\.0\.0/16#" calico.yaml
kubectl apply -f calico.yaml
#查看结果
kubectl get node
- k8s单机特殊处理
- master节点污点处理
单集版的k8s安装后, 无法部署服务。因为默认master不能部署pod,有污点, 需要去掉污点或者新增一个node,我这里是去除污点。
#执行后看到有输出说明有污点 k8s-master 主机名
kubectl describe nodes k8s-master |grep Taints
#执行这句就行,就是取消污点 gameble- 污点名带减号表示删除
kubectl taint node k8s-master gameble-
- 安装补全命令包
yum -y install bash-completion
kubectl completion bash
source /usr/share/bash-completion/bash_completion
kubectl completion bash >/etc/profile.d/kubectl.sh
source /etc/profile.d/kubectl.sh
cat >> /root/.bashrc <<EOF
source /etc/profile.d/kubectl.sh
EOF
- 基于k8s单机部署中间服务
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get pods,svc
访问192.168.1.8:32662 nginx是否可以访问 可访问 代表正常
五、K8S可视化
1、k8s-dashboard 下载
官网地址
https://github.com/kubernetes/dashboard/releases
注意要下载对应的版本
目前我的k8s版本为v1.21.5
所以需要找到官网地址 支持1.21.5的版本
2、下载并应用文件
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml
如果下载yaml时 出现
The connection to the server raw.githubusercontent.com was refused - did you specify the right host or port?
配置/etc/hosts 解析地址
#编辑并应用这个配置
kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard
# 搜索/type 修改为type: NodePort
修改完成之后 就有端口了
可以开始访问 k8s 可视化界面了
https://ip:30029
3、创建dashboard-svc-account.yaml 认证文件
我的认证文件存放在 home/k8s 目录下
apiVersion: v1
kind: ServiceAccount
metadata:
name: dashboard-admin
namespace: kube-system
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: dashboard-admin
subjects:
- kind: ServiceAccount
name: dashboard-admin
namespace: kube-system
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: rbac.authorization.k8s.io
4、执行认证文件
kubectl apply -f dashboard-svc-account.yaml
#获取令牌
[root@i-wgt9mh3x ~]# kubectl get secret -n kube-system |grep admin|awk '{print $1}'
dashboard-admin-token-qt2n5
# 上一部的结果输入到下面
[root@i-wgt9mh3x ~]# kubectl describe secret dashboard-admin-token-qt2n5 -n kube-system|grep '^token'|awk '{print $2}'
# 得到的token值
eyJhbGciOiJSUzI1NiIsImtpZCI6InVsemhnZWtOVFBy ?????????????????
通过token 去登录
5、登录进来后,创建命令空间
注意创建的时候选择创建的命名空间,这样就会在命名空间里面了。
生产环境运营的时候 拉取镜像后 运行docker镜像 指定环境变量即可
docker -e “SPRING_PROFILES_ACTIVE=pro”
6、可视化 安装查看pods 内存、CPU 插件
wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.6/components.yaml
修改yaml配置文件的image为国内源,否则拉取不到镜像
image: k8s.gcr.io/metrics-server-amd64:v0.3.6
#改成
image: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6
加入
args:
- --cert-dir=/tmp
- --secure-port=4443
- --kubelet-insecure-tls
- --kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIP
应用
kubectl apply -f components.yaml
#查看cpu 内存占用情况
kubectl top po -n kube-system
kubectl top po -n default
kubectl -n kube-system top pod
crictl ps -a // 查看k8s信息
k8s 证书过期后
kubeadm certs check-expiration // 查看证书有效期
kubeadm certs renew all // 重新生成全部证书
kubeadm init phase kubeconfig all // 重新生成配置文件
systemctl restart kubelet // 重启kubelet
cp /etc/kubernetes/admin.conf ~/.kube/config //替换kubeconfig
k8s 版本不更新 拉取最新的镜像部署
在deployments 选择对应的项目 编辑文章来源:https://www.toymoban.com/news/detail-479529.html
spec:
containers:
- name: sas
image: 镜像地址
env:
- name: SPRING_PROFILES_ACTIVE
value: test
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
imagePullPolicy: Always
最后一个 imagePullPolicy: Always文章来源地址https://www.toymoban.com/news/detail-479529.html
到了这里,关于docker+k8s+jenkins+harbor持续集成自动化部署的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!