docker+k8s+jenkins+harbor持续集成自动化部署

一、安装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已经默认禁用)
docker+k8s+jenkins+harbor持续集成自动化部署_第1张图片
3、配置镜像加速

到阿里云获取自己镜像加速地址
docker+k8s+jenkins+harbor持续集成自动化部署_第2张图片

cat /etc/docker/daemon.json
        {
        "registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"], ##修改为你的容器加速器地址   登录阿里云点击镜像工具-镜像加速器

4、安装 docker-compose

  • 官网找到下载地址

https://github.com/docker/compose/releases 版本地址
docker+k8s+jenkins+harbor持续集成自动化部署_第3张图片
我的下载地址

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

注意 一定要配置挂载 不然磁盘容易满
docker+k8s+jenkins+harbor持续集成自动化部署_第4张图片

  • 启动
./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、项目配置

  • 项目结构

docker+k8s+jenkins+harbor持续集成自动化部署_第5张图片
ums-app 为业务处理
ums-api 为api接口
因api包依赖到根项目的pom.xml 所以 打包时 需要将根项目打包,(但不打包ums-app)
排除ums-app 则在 ums-app的pom.xml

.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"]
  • 父项目加载打包插件

        .repository.releases>192.168.1.8:1180</docker.repository.releases>
        1.0.1-SNAPSHOT</revision>
</properties>


        
            
                
                    com.spotify</groupId>
                    docker-maven-plugin</artifactId>
                    1.2.2</version>
                    
                        docker-releases</serverId>
                        http://${docker.repository.releases}</registryUrl>
                        true</pushImage>
                        ${docker.repository.releases}/ums/${project.artifactId}:${revision}</imageName>
                        <!--http://172.25.6.11:2375</dockerHost>-->
                        ${project.basedir}/src/main/docker</dockerDirectory>
                        
                            dev</active>
                            ${project.build.finalName}.jar</JAR_FILE>
                        </buildArgs>
                        <rm>true</rm>
                        <!-- 强制添加标签-->
                        true</forceTags>
                        
                            ${revision}</imageTag>
                        </imageTags>
                        
                            
                                /</targetPath>
                                ${project.build.directory}</directory>
                                ${project.build.finalName}.jar</include>
                            </resource>
                        </resources>
                    </configuration>
                </plugin>

            </plugins>
        </pluginManagement>

    </build>
  • 子项目 ums-app引用

  com.spotify</groupId>
  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、启动
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 /etc/localtime:/etc/localtime jenkins/jenkins
5、打开客户端
http://serverIp:port
docker+k8s+jenkins+harbor持续集成自动化部署_第6张图片
6、由于在docker容器 安装的jenkins 所以需要进入容器查看密码
进入容器
docker exec -it jenkins bash
查看密码
cat /var/jenkins_home/secrets/initialAdminPassword
登录后 安装推荐插件
docker+k8s+jenkins+harbor持续集成自动化部署_第7张图片
插件安装完成,创建管理员用户
至此,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---->勾选—>直接安装
docker+k8s+jenkins+harbor持续集成自动化部署_第8张图片

docker+k8s+jenkins+harbor持续集成自动化部署_第9张图片
docker+k8s+jenkins+harbor持续集成自动化部署_第10张图片

已安装好的插件
docker+k8s+jenkins+harbor持续集成自动化部署_第11张图片
9、jenkins配置

  • Dashboard>系统管理>Configure System (如果没有这个配置则需要添加 插件)
    同一页面
    Jenkins Location 这列需要配置 公网地址docker+k8s+jenkins+harbor持续集成自动化部署_第12张图片
    全局属性 这列配置环境变量
    docker+k8s+jenkins+harbor持续集成自动化部署_第13张图片
    配置变量的地址
    vi /usr/lib/systemd/system/docker.service
    –graph /home/docker docker 挂载目录 不处理磁盘容器满了
    docker+k8s+jenkins+harbor持续集成自动化部署_第14张图片
    配置hosts地址
    vi /etc/hosts
    docker+k8s+jenkins+harbor持续集成自动化部署_第15张图片

  • Dashboard>系统管理>全局工具配置 (如果没有这个配置则需要添加 插件)
    拉到最下面 我已经装了 所以是应用,没有装的情况是 需要新增一个
    选择
    maven的版本
    名字
    docker+k8s+jenkins+harbor持续集成自动化部署_第16张图片
    进入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
docker+k8s+jenkins+harbor持续集成自动化部署_第17张图片
在这里插入图片描述

  • 配置jenkins的密钥
    密钥为之前在jenkins生成的,id_rsa 为密钥 docker+k8s+jenkins+harbor持续集成自动化部署_第18张图片docker+k8s+jenkins+harbor持续集成自动化部署_第19张图片

  • 创建maven项目
    docker+k8s+jenkins+harbor持续集成自动化部署_第20张图片

  • BRANCH_ENV 为变量

  • dev、master 对应的分支名,必须一致

docker+k8s+jenkins+harbor持续集成自动化部署_第21张图片

docker+k8s+jenkins+harbor持续集成自动化部署_第22张图片

三、安装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搭建

  1. 如果之前有装过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
  1. 修改主机名称 (之前有处理过 可不用管)
hostnamectl set-hostname k8s-master && bash
  1. 添加主机的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
  1. 关闭防火墙 (之前有处理过 可不用管)
systemctl stop firewalld
systemctl disable firewalld
  1. 关闭selinux(之前有处理过 可不用管)
setenforce 0
$ sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
  1. 关闭swap交换区间(之前有处理过 可不用管)
swapoff -a # 临时
sed -i 's/.*swap.*/#&/' /etc/fstab # 永久
free -g #验证,swap必须为0
  1. 配置 iptables链路(之前有处理过 可不用管)
$ cat > /etc/sysctl.d/k8s.conf <.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
  1. 添加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
  1. 安装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
  1. 初始化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

执行完成后保存以下信息 便于后续加入节点
docker+k8s+jenkins+harbor持续集成自动化部署_第23张图片

  1. 配置kubectl工具
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
  1. 配置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
  1. 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 </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

docker+k8s+jenkins+harbor持续集成自动化部署_第24张图片

访问192.168.1.8:32662 nginx是否可以访问 可访问 代表正常

五、K8S可视化

1、k8s-dashboard 下载
官网地址
https://github.com/kubernetes/dashboard/releases
注意要下载对应的版本
目前我的k8s版本为v1.21.5
在这里插入图片描述

所以需要找到官网地址 支持1.21.5的版本
docker+k8s+jenkins+harbor持续集成自动化部署_第25张图片

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 解析地址
docker+k8s+jenkins+harbor持续集成自动化部署_第26张图片

#编辑并应用这个配置
kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard

# 搜索/type 修改为type: NodePort

docker+k8s+jenkins+harbor持续集成自动化部署_第27张图片
修改完成之后 就有端口了
在这里插入图片描述
可以开始访问 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+k8s+jenkins+harbor持续集成自动化部署_第28张图片
docker+k8s+jenkins+harbor持续集成自动化部署_第29张图片
注意创建的时候选择创建的命名空间,这样就会在命名空间里面了。
docker+k8s+jenkins+harbor持续集成自动化部署_第30张图片

docker+k8s+jenkins+harbor持续集成自动化部署_第31张图片

生产环境运营的时候 拉取镜像后 运行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 内存占用情况
docker+k8s+jenkins+harbor持续集成自动化部署_第32张图片

kubectl top po -n kube-system
kubectl top po -n default
kubectl -n kube-system top pod

你可能感兴趣的:(docker,kubernetes,jenkins)