当前位置:   article > 正文

k8s安装部署详细教程_ks8部署详细介绍

ks8部署详细介绍

目录

一、准备工作

二、环境配置

1、修改hosts配置(所有节点执行)

 2、配置ssh免密登录(master节点)

3、关闭swap分区(所有节点执行)

4、关闭防火墙(所有节点执行)

5、修改内核参数(所有节点执行)

6、配置集群时间同步(所有节点执行)

7、配置k8s的yum源(所有节点执行)

三、安装docker

1、先卸载docker(所有节点执行)

2、配置yum仓库(所有节点执行)

3、安装docker(所有节点执行)

四、安装k8s

1、安装三大组件-kubeadm、kubelet、kubectl(所有节点执行)

2、添加主节点hosts(所有节点添加)

3、初始化k8s集群(master节点)

4、加入节点(所有node节点)

五、安装网络插件Calico(所有节点执行)

六、安装kuboard图形化工具

1、下载kuboard插件

2、安装kuboard

七、安装jenkins

1、文件授权

2、配置Jenkins挂载目录

3、编写docker-compose.yml文件

4、启动compose

5、配置镜像加速

6、获取Jenkins登录密码

7、升级jenkins

8、登录jenkins

9、下载插件

10、将jdk和maven 上传到挂载目录并解压

11、进入jenkins容器

12、在jenkins的全局配置中配置jdk和maven

13、在系统管理->系统配置修改publish over SSH

 14、配置服务器无密码连接jenkins容器

八、安装harbor

1、下载harbor

 2、解压

3、修改harbor.yml配置 

 4、执行安装

九、配置流水线

1、新建流水线

2、拉取git仓库代码(我这里是用的阿里云仓库)

3、通过maven构建项目(没有配置环境变量需要用全路径)

4、通过Docker制作镜像

5、将自定义镜像推送到harbor 

6、将yml推送到服务器(分成两个文件,因为我准备使用的yq命令修改yml)

7、远程执行k8s的kubectl命令

8、最终的流水线版本


一、准备工作

在vmware中安装,创建三台centos服务器

主机ip配置
master192.168.199.1284核,6g内存,40g硬盘
node1192.168.199.1302核,2g内存,20g硬盘
node2192.168.199.1312核,2g内存,20g硬盘

二、环境配置


1、修改hosts配置(所有节点执行)

  1. vim /etc/hosts
  2. 192.168.199.128 master
  3. 192.168.199.130 node1
  4. 192.168.199.131 node2

 2、配置ssh免密登录(master节点)

先生成密钥,再复制到所有节点

  1. ssh-keygen
  2. ssh-copy-id master
  3. ssh-copy-id node1
  4. ssh-copy-id node2
  5. #测试连接
  6. ssh node1

3、关闭swap分区(所有节点执行)

kubelet要求必须禁用交换分区,所以kubeadm初始化时回检测swap是否关闭,如果没有关闭会报错,如果不想关闭安装时命令行可以指定-ignore-preflight-errors=Swap,关闭Swap分区在所有节点上执行如下命令:

  1. #临时关闭
  2. swapoff -a
  3. #永久关闭
  4. echo vm.swappiness = 0 >> /etc/sysctl.conf
  5. sysctl -p
  6. #我在虚拟机中重启后状态仍然是开启,不知道是什么原因,没有影响流程,就没有继续查下去

4、关闭防火墙(所有节点执行)

  1. systemctl disable firewalld
  2. systemctl stop firewalld

5、修改内核参数(所有节点执行)

  1. modprobe br_netfilter
  2. echo "modprobe br_netfilter" >> /etc/profile
  3. tee /etc/sysctl.d/k8s.conf << EOF
  4. net.bridge.bridge-nf-call-ip6tables = 1
  5. net.bridge.bridge-nf-call-iptables = 1
  6. EOF
  7. #重新加载配置
  8. sysctl -p /etc/sysctl.d/k8s.conf

6、配置集群时间同步(所有节点执行)

  1. #安装日期插件
  2. yum install -y ntp ntpdate
  3. ntpdate cn.pool.ntp.org
  4. systemctl start ntpd
  5. systemctl enable ntpd

7、配置k8s的yum源(所有节点执行)

这里配置k8s的aliyun源

  1. vim /etc/yum.repos.d/kubernetes.repo
  2. #将以下内容复制进去
  3. [kubernetes]
  4. name=Kubernetes
  5. baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
  6. enabled=1
  7. gpgcheck=0

三、安装docker

1、先卸载docker(所有节点执行)

  1. yum remove docker \
  2. docker-client \
  3. docker-client-latest \
  4. docker-common \
  5. docker-latest \
  6. docker-latest-logrotate \
  7. docker-logrotate

2、配置yum仓库(所有节点执行)

配置阿里云的yum仓库地址,默认国外的下载速度比较慢

  1. yum install -y yum-utils \
  2. device-mapper-persistent-data \
  3. lvm2
  4. yum-config-manager \
  5. --add-repo \
  6. https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3、安装docker(所有节点执行)

  1. yum install docker-ce-20.10.9-3.el7 docker-ce-cli-20.10.9-3.el7 docker-compose-plugin containerd.io
  2. #启动docker
  3. systemctl start docker
  4. #设置开机自启
  5. systemctl enable docker
  6. #验证安装
  7. docker -v
  8. 配置阿里云镜像加速器
  9. cat > /etc/docker/daemon.json << EOF
  10. {
  11. "registry-mirrors": ["https://p59n3y39.mirror.aliyuncs.com"]
  12. }
  13. > EOF
  14. 重新加载并重启
  15. sudo systemctl daemon-reload
  16. sudo systemctl restart docke

四、安装k8s

1、安装三大组件-kubeadm、kubelet、kubectl(所有节点执行)

  • kubeadm:用来初始化k8s集群的指令。
  • kubelet:在集群的每个节点上用来启动 Pod 和容器等。
  • kubectl:用来与k8s集群通信的命令行工具,查看、创建、更新和删除各种资源。
  1. yum install -y kubelet-1.23.17 kubeadm-1.23.17 kubectl-1.23.17
  2. # 所有节点设置开机自启
  3. systemctl enable kubelet

2、添加主节点hosts(所有节点添加)

echo "192.168.199.128 cluster-endpoint" >> /etc/hosts

3、初始化k8s集群(master节点)

  1. kubeadm init \
  2. --apiserver-advertise-address=192.168.199.128 \
  3. --control-plane-endpoint=cluster-endpoint \
  4. --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \
  5. --kubernetes-version v1.23.17 \
  6. --service-cidr=10.96.0.0/12 \
  7. --pod-network-cidr=172.20.0.0/16

成功界面

  1. Your Kubernetes control-plane has initialized successfully!
  2. To start using your cluster, you need to run the following as a regular user:
  3. mkdir -p $HOME/.kube
  4. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  5. sudo chown $(id -u):$(id -g) $HOME/.kube/config
  6. Alternatively, if you are the root user, you can run:
  7. export KUBECONFIG=/etc/kubernetes/admin.conf
  8. You should now deploy a pod network to the cluster.
  9. Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  10. https://kubernetes.io/docs/concepts/cluster-administration/addons/
  11. Then you can join any number of worker nodes by running the following on each as root:
  12. kubeadm join cluster-endpoint:6443 --token e8enii.joiejbe3xoj6v9mt \
  13. --discovery-token-ca-cert-hash sha256:5756518626710f38bc3b7d4a405990c6274b513628467df94d1aa0a5c5b6f196

4、加入节点(所有node节点)

  1. kubeadm join cluster-endpoint:6443 --token e8enii.joiejbe3xoj6v9mt \
  2. --discovery-token-ca-cert-hash sha256:5756518626710f38bc3b7d4a405990c6274b513628467df94d1aa0a5c5b6f196

查看token列表,可观察到每个token的剩余有效时间

  1. TOKEN TTL EXPIRES USAGES DESCRIPTION EXTRA GROUPS
  2. p2hjar.gvqyz2ip3nqyac2c 23h 2024-02-01T08:56:31Z authentication,signing <none> system:bootstrappers:kubeadm:default-node-token

 默认token有效期为24小时,过期之后token失效,可重新生成token

kubeadm token create --print-join-command

五、安装网络插件Calico(所有节点执行)

  1. 下载calico.yml保存
  2. curl https://docs.projectcalico.org/v3.15/manifests/calico.yaml -O
  3. 修改配置
  4. 3727行 - name: CALICO_IPV4POOL_CIDR
  5. 3728行 value: "172.20.0.0/16"
  6. 安装至kubectl
  7. kubectl apply -f calico.yaml
  8. 验证是否成功
  9. kubectl get pod -A | grep calico

六、安装kuboard图形化工具(master节点)

1、下载kuboard插件

curl https://addons.kuboard.cn/kuboard/kuboard-v3.yaml -O

2、安装kuboard

kubectl apply -f kuboard-v3.yaml

查询安装状态

  1. [root@master soft]# kubectl get pods -n kuboard
  2. NAME READY STATUS RESTARTS AGE
  3. kuboard-agent-2-65fdb5df8b-27chx 1/1 Running 13 26d
  4. kuboard-agent-57ffc5f966-8nnbd 1/1 Running 13 26d
  5. kuboard-etcd-xtzrb 1/1 Running 6 26d
  6. kuboard-loki-0 1/1 Running 2 (2d ago) 22d
  7. kuboard-loki-grafana-f78869978-qq9kp 1/1 Running 2 (2d ago) 22d
  8. kuboard-promtail-85227 1/1 Running 5 22d
  9. kuboard-promtail-kv8b9 1/1 Running 2 (2d ago) 22d
  10. kuboard-promtail-xhh8z 1/1 Running 2 (2d ago) 22d
  11. kuboard-pv-browser-cq6v8 2/2 Running 2782 (4m35s ago) 26d
  12. kuboard-pv-browser-xljll 2/2 Running 2776 (2m19s ago) 26d
  13. kuboard-pv-browser-xtpfx 2/2 Running 2779 (4m35s ago) 26d
  14. kuboard-questdb-78d884c786-nrb99 1/1 Running 6 26d
  15. kuboard-v3-56b4b954c9-zwhtc 1/1 Running 6 26d

七、安装jenkins(master节点)

1、文件授权

  1. cd /var/run
  2. #修改docker.sock 文件所属组
  3. chown root:root docker.sock
  4. #修改权限
  5. chmod o+rw docker.sock

2、配置Jenkins挂载目录

  1. mkdir -p /home/jenkins/jenkins_mount
  2. chmod 777 /home/jenkins/jenkins_mount

3、编写docker-compose.yml文件

  1. vim docker-compose.yml
  2. #设置容器外访问端口8085
  3. version: '3.1'
  4. services:
  5. jenkins:
  6. image: jenkins/jenkins
  7. privileged: true
  8. user: root
  9. ports:
  10. - 8085:8080
  11. - 50000:50000
  12. container_name: jy_jenkins
  13. volumes:
  14. - /home/jenkins/jenkins_mount:/var/jenkins_home
  15. - /etc/localtime:/etc/localtime
  16. - /var/run/docker.sock:/var/run/docker.sock
  17. - /usr/bin/docker:/usr/bin/docker
  18. - /etc/docker/daemon.json:/etc/docker/daemon.json

4、启动compose

docker compose up -d

5、配置镜像加速

  1. [root@master jenkins_mount]# pwd
  2. /home/jenkins/jenkins_mount

修改挂载目录的hudson.model.UpdateCenter.xml文件 添加清华源加速

  1. <?xml version='1.1' encoding='UTF-8'?>
  2. <sites>
  3. <site>
  4. <id>default</id>
  5. <url>https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url>
  6. </site>
  7. </sites>

6、获取Jenkins登录密码

  1. cat /home/jenkins/jenkins_mount/secrets/initialAdminPassword
  2. 710f38bc3b7d4a405990c6274b513628467df94d1aa0a5

7、升级jenkins

下载jenkins的war包

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/latest/jenkins.war

然后停止jenkins容器,记得是停止!

  1. 查找jenkins服务
  2. docker ps -a|grep jenkins
  3. docker stop <container_id>
  4. 执行docker cp命令,将war拉取到jenkins容器内
  5. docker cp jenkins.war <container_id>:/usr/share/jenkins/jenkins.war
  6. 再启动容器
  7. docker start <container_id>

8、登录jenkins

账号是:admin 密码是:710f38bc3b7d4a405990c6274b513628467df94d1aa0a5

选择安装推荐的插件就可以了

9、下载插件

系统管理->插件管理->Available plugins

搜索插件安装

  1. Git Parameter Plug-In
  2. Publish Over SSH

10、将jdk和maven 上传到挂载目录并解压

修改maven仓库地址

  • 添加阿里云镜像地址
  1. </mirrors>
  2. <mirror>
  3. <id>alimaven</id>
  4. <name>aliyun maven</name>
  5. <url>https://maven.aliyun.com/repository/public/</url>
  6. <mirrorOf>central</mirrorOf>
  7. </mirror>
  8. </mirrors>
  • 添加jdk8编译
  1. </profiles>
  2. <profile>
  3. <id>jdk8</id>
  4. <activation>
  5. <activeByDefault>true</activeByDefault>
  6. <jdk>1.8</jdk>
  7. </activation>
  8. <properties>
  9. <maven.compiler.source>1.8</maven.compiler.source>
  10. <maven.compiler.target>1.8</maven.compiler.target>
  11. <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
  12. </properties>
  13. </profile>
  14. </profiles>
  • 激活profile
  1. <activeProfiles>
  2. <activeProfile>jdk8</activeProfile>
  3. </activeProfiles>

11、进入jenkins容器

  1. docker ps -a|grep jenkins
  2. #进入容器
  3. docker exec -it <container_id> bash
  4. root@26a9d00b6a4c:/var/jenkins_home/apache-maven-3.9.6# pwd
  5. /var/jenkins_home/apache-maven-3.9.6

12、在jenkins的全局配置中配置jdk和maven

13、在系统管理->系统配置修改publish over SSH

 14、配置服务器无密码连接jenkins容器

  1. # 进入jenkins容器
  2. docker exec -it b5a49147b7f5 bash
  3. # 创建密钥对,一路默认回车
  4. ssh-keygen
  5. #复制密钥
  6. cat ~/.ssh/id_rsa.pub
  7. 在master服务器中添加密钥
  8. cd /root
  9. mkdir .ssh
  10. cd .ssh
  11. #将密钥拷贝进去
  12. vim authorized_keys

八、安装harbor(master节点)

1、下载harbor

  1. #wget下载不了的话,下载后上传到服务器
  2. wget https://github.com/goharbor/harbor/releases/download/v2.10.0/harbor-offline-installer-v2.10.0.tgz

 2、解压

  1. tar -xzvf harbor-offline-installer-v2.10.0.tgz
  2. #进入目录
  3. cd ./harbor

3、修改harbor.yml配置 

vim harbor.yml

 设置hostname地址,端口,密码

注释掉https模块,不然保存ERROR:root:Error: The protocol is https but attribute ssl_cert is not set

 4、执行安装

  1. ./prepare
  2. ./install.sh

 安装完成

九、配置流水线

1、新建流水线

 打开流水线语法

2、拉取git仓库代码(我这里是用的阿里云仓库)

3、通过maven构建项目(没有配置环境变量需要用全路径)

4、通过Docker制作镜像

5、将自定义镜像推送到harbor 

  1. #修改私服在jenkins服务器的/etc/docker/daemon.json
  2. {
  3. "registry-mirrors" : ["https://q5bf287q.mirror.aliyuncs.com", "https://registry.docker-cn.com","http://hub-mirror.c.163.com"],
  4. "exec-opts": ["native.cgroupdriver=systemd"],
  5. "insecure-registries": ["192.168.199.128"]
  6. }
  7. # 重新加载
  8. systemctl daemon-reload
  9. systemctl restart docker
  10. docker swarm init

 将镜像推送到harbor

6、将yml推送到服务器(分成两个文件,因为我准备使用的yq命令修改yml)

 配置Deployment和Service

7、远程执行k8s的kubectl命令

8、最终的流水线版本

  1. def TAG = 'v1.0.0'
  2. // 所有脚本命令都放在pipline中
  3. pipeline{
  4. // 指定任务在哪个集群节点中执行
  5. agent any
  6. // 声明全局变量,方便使用
  7. environment {
  8. harborUser = 'wuxiong'
  9. harborPassword = 'Wuxiong1028'
  10. harborAddress = '192.168.199.128:5000'
  11. harborRepo = 'harbor'
  12. }
  13. stages {
  14. stage('拉取git仓库代码') {
  15. steps {
  16. checkout scmGit(branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: '2900e7f7-50ed-4b5e-9bc3-758386c5aaa9', url: 'https://codeup.aliyun.com/658a941385f0966eafd09946/springbootdemo.git']])
  17. script{
  18. echo '拉取git仓库代码-SUCCESS'
  19. TAG = sh(script: "git tag --sort=-creatordate |head -n1", returnStdout:true).trim()
  20. echo TAG
  21. }
  22. checkout scmGit(branches: [[name: TAG]], extensions: [], userRemoteConfigs: [[credentialsId: '2900e7f7-50ed-4b5e-9bc3-758386c5aaa9', url: 'https://codeup.aliyun.com/658a941385f0966eafd09946/springbootdemo.git']])
  23. }
  24. }
  25. stage('通过maven构建项目') {
  26. steps {
  27. sh '/var/jenkins_home/apache-maven-3.9.6/bin/mvn clean package -DiskpTest'
  28. }
  29. }
  30. stage('通过Docker制作自定义镜像') {
  31. steps {
  32. sh '''cp ./target/*.jar ./
  33. docker build -t ${JOB_NAME}:'''+TAG+''' ./'''
  34. }
  35. }
  36. stage('将自定义镜像推送到harbor') {
  37. steps {
  38. sh '''docker login -u ${harborUser} -p ${harborPassword} ${harborAddress}
  39. docker tag ${JOB_NAME}:'''+TAG+''' ${harborAddress}/${harborRepo}/${JOB_NAME}:'''+TAG+'''
  40. docker push ${harborAddress}/${harborRepo}/${JOB_NAME}:'''+TAG
  41. }
  42. }
  43. stage('修改k8s的yml文件') {
  44. steps {
  45. sh 'ssh root@192.168.199.128 "yq -i \'.spec.template.spec.containers[0].image = \\"${harborAddress}/${harborRepo}/${JOB_NAME}:'+TAG+'\\"\' /usr/local/k8s/k8s-deployment.yml"'
  46. }
  47. }
  48. stage('将yml文件传到k8s-master上') {
  49. steps {
  50. sshPublisher(publishers: [sshPublisherDesc(configName: 'k8s', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'k8s-deployment.yml')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false), sshPublisherDesc(configName: 'k8s', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'k8s-service.yml')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
  51. }
  52. }
  53. stage('远程执行k8s-master的kubectl命令') {
  54. steps {
  55. sh '''ssh root@192.168.199.128 kubectl apply -f /usr/local/k8s/k8s-deployment.yml
  56. ssh root@192.168.199.128 kubectl apply -f /usr/local/k8s/k8s-service.yml'''
  57. }
  58. }
  59. }
  60. }

十、其他

1、我的dockerfile

  1. FROM java:8
  2. MAINTAINER wuxiong_sc@163.com
  3. ENV TZ=Asia/Shanghai
  4. RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
  5. ENV JAVA_OPTS="-Xms128m -Xmx256m -Djava.security.egd=file:/dev/./urandom"
  6. WORKDIR /workdir
  7. ADD ./target/*.jar ./app.jar
  8. EXPOSE 9111
  9. CMD ["sh", "-c","java $JAVA_OPTS -jar app.jar"]

2、 docker-deployment.yml

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: springbootdemo-pipe
  5. namespace: test
  6. spec:
  7. replicas: 3
  8. selector:
  9. matchLabels:
  10. app: springbootdemo-pipe-pod
  11. template:
  12. metadata:
  13. labels:
  14. app: springbootdemo-pipe-pod
  15. spec:
  16. containers:
  17. - name: springbootdemo-pipe
  18. image: 192.168.199.128:5000/harbor/springbootdemo-pipe:v40
  19. ports:
  20. - containerPort: 9111

3、 docker-service.yml

  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4. name: springbootdemo-pipe
  5. namespace: test
  6. spec:
  7. selector:
  8. app: springbootdemo-pipe-pod
  9. type: NodePort
  10. ports:
  11. - port: 31111 # Service的端口
  12. protocol: TCP
  13. targetPort: 9111 # Pod的端口
  14. nodePort: 31111
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/245237
推荐阅读
相关标签
  

闽ICP备14008679号