一、Kubernetes(K8S)部署
1. K8S部署引论
K8S的安装流程 目标环境为Centos8 内核4.1 libseccomp 2.3
注意:建议在一个新的服务搞K8S换内核有风险 有可能会启动不了你的服务器 并且下面的每一步都要保证没有错误才向下进行
2. K8S配置要求
K8s要求 第一点 centos系统的内核必须是4.4以上 后续的坑 libseccomp需要2.4以上
shell
# 查看系统版本
cat /etc/centos-release
# 低于4.4的内核版本需要升级
# 查看内核版本
# 4目前发布的内核主版本.8偶数表示稳定版本,奇数表示开发中版本.0错误修补的次数.
# 348当前这个版本的第348次微调,el8-EnterpriseLinux支持8G运行内存的对称多处理器机器
# ,x86_64是32位64位机器都支持
uname -r
内核低于4.4的参考如下
shell
# 导入ELRepo仓库的公共密钥
sudo rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
# 安装ELRepo仓库
sudo yum install https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm
# 安装内核,ml-mainline表示安装主线版本
sudo yum --enablerepo=elrepo-kernel install kernel-ml
# 0表示以最新安装的内核启动
sudo grub2-set-default 0
# 生成grub配置文件
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
# 重启系统
reboot
# 重启后使用查看内核指令重新查看是否升级内核成功
# *根据名称删除不用的内核(可选) 我的建议不删* 以后方便因为升级内核引起的原因 可以回滚
sudo yum remove kernel-tools-libs-4.18.0 kernel-modules-4.18.0 kernel-4.18.0 kernel-core-4.18.0 kernel-tools-4.18.0
3.安装K8S前的准备工作
(1)安装 vim与wget
shell
# 一般服务器都有 用本身就自带vi也可以
sudo yum -y install vim
# 网络上自动下载文件的工具,它支持http,https,ftp协议,可以使用http代理。
sudo yum -y install wget
# 执行判断wget是否安装成功
wget --version
(2)wget或者yum安装时遇到的问题的解决方案
wget安装可能出现的问题以及解决办法:
centos8.0执行yum指令出现Error:Failed to synchronize cache for repo 'AppStream'
解决方法:修改/etc/yum.repos.d下的"CentOS-AppStream.repo""CentOS-Base.repo""CentOS-Extras.repo""CentOS-PowerTools.repo"。
注:如果修改不好使就删除这个文件然后重新建 哪个报错改哪个文件!!!!没报错不要动
shell
# CentOS-AppStream.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client. You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#
[AppStream]
name=CentOS-$releasever - AppStream
baseurl=https://mirrors.aliyun.com/centos/8-stream/AppStream/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
shell
# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client. You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#
[BaseOS]
name=CentOS-$releasever - Base
baseurl=http://mirrors.aliyun.com/centos/$releasever/BaseOS/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
shell
# CentOS-Extras.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client. You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#
#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
baseurl=https://mirrors.aliyun.com/centos/8-stream/extras/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
shell
# CentOS-PowerTools.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client. You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#
[PowerTools]
name=CentOS-$releasever - PowerTools
baseurl=https://mirrors.aliyun.com/centos/8-stream/PowerTools/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
(3)对各种文件配置
- 配置本机名称
将主机名指向本机IP,主机名只能包含:字母、数字、-(横杠)、.(点)
shell
# 获取主机名称
hostname
# 临时修改主机名称 重启后还原
hostname 主机名
# 主机名持久化 先修改临时在再做这步
sudo echo '主机名' > /etc/hostname
- 配置本机IP指向自己
shell
# 编辑hosts
sudo vim /etc/hosts
# 有多个节点 每个节点都要配置 只是文件中新增一行ip不是127.0.0.1原有的不要动
192.168.00.00 k8s-1
- 同步网络时间
shell
# 查看时间是否与网络时间一致
date
# 同步网络时间 时间一致跳过本步骤
sudo yum -y install ntpdate
sudo ntpdate ntp1.aliyun.com
sudo systemctl status ntpdate
sudo systemctl start ntpdate
sudo systemctl status ntpdate
sudo systemctl enable ntpdate
- 开启防火墙开放端口
shell
# 开启防火墙!开启!看好命令再复制
# 设置开机启用防火墙
systemctl enable firewalld.service
# 设置开机禁用防火墙
systemctl disable firewalld.service
# 启动防火墙
systemctl start firewalld
# 关闭防火墙
systemctl stop firewalld
- 开放端口号以及重载配置
shell
# 控制面板
# Kubernetes API server 所有
firewall-cmd --zone=public --add-port=6443/tcp --permanent
# etcd server client API kube-apiserver, etcd
firewall-cmd --zone=public --add-port=2379/tcp --permanent
# etcd server client API kube-apiserver, etcd
firewall-cmd --zone=public --add-port=2380/tcp --permanent
# Kubelet API 自身, 控制面
firewall-cmd --zone=public --add-port=10250/tcp --permanent
# kube-scheduler 自身
firewall-cmd --zone=public --add-port=10259/tcp --permanent
# kube-controller-manager 自身
firewall-cmd --zone=public --add-port=10257/tcp --permanent
# 信任集群中各个节点的IP 自己的IP
firewall-cmd --zone=trusted --add-source=192.168.80.60 --permanent
# 信任集群中各个节点的IP 这可以执行多次 这是各个节点 没有不执行
firewall-cmd --zone=trusted --add-source=192.168.80.16 --permanent
# 端口转发
firewall-cmd --add-masquerade --permanent
firewall-cmd --reload
# 查看开放的端口号
firewall-cmd --list-all
# 查看指定域防火墙信息
firewall-cmd --list-all --zone=trusted
# 工作节点 看好了 工作节点跟控制面板不是一个服务器别执行错了
# Kubelet API 自身, 控制面
firewall-cmd --zone=public --add-port=10250/tcp --permanent
# NodePort Services† 所有
firewall-cmd --zone=public --add-port=30000-32767/tcp --permanent
# 信任集群中各个节点的IP
firewall-cmd --zone=trusted --add-source=192.168.80.60 --permanent
# 信任集群中各个节点的IP
firewall-cmd --zone=trusted --add-source=192.168.80.16 --permanent
# 端口转发
firewall-cmd --add-masquerade --permanent
firewall-cmd --reload
firewall-cmd --list-all
firewall-cmd --list-all --zone=trusted
- 关闭交换空间
shell
# 关闭交换空间 防止k8s出现bug
# 查看内存和交换空间
free -h
# 临时关闭 交换空间比较大的话要等一会
sudo swapoff -a
# 永久关闭 先执行临时
sudo sed -i 's/.*swap.*/#&/' /etc/fstab
free -h
- 关闭 selinux
shell
# 查看 selinux Disabled的话就是已经关闭了
getenforce
# 临时关闭
cat /etc/selinux/config
sudo setenforce 0
# 永久关闭
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=Disabled/' /etc/selinux/config
cat /etc/selinux/config
(3)安装 Containerd、Docker
Docker 不是必须的,k8s 1.24.0 开始使用 Containerd 替代 Docker,但还是推荐安装 Docker,原因:在k8s中构建Docker镜像时使用,需要在GitLab Runner 中配置如下,详情参见
shell
# GitLab Runner 配置 先不用管看看就行这段
[[runners]]
...
[runners.kubernetes]
...
[runners.kubernetes.volumes]
[[runners.kubernetes.volumes.host_path]]
name = "docker"
mount_path = "/var/run/docker.sock"
host_path = "/var/run/docker.sock"
/etc/containerd/config.toml 中的 SystemdCgroup = true 的优先级高于 /etc/docker/daemon.json 中的 cgroupdriver
shell
# -------------------------安装docker 如果已经有了docker 忽略---------------------------------
# https://docs.docker.com/engine/install/centos/
# 经过测试,可不安装 docker 也可使 k8s 正常运行
# 只需要不安装 docker-ce、docker-ce-cli、docker-compose-plugin 即可
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
# 安装报错 找不到这些依赖的时候 看本代码段的下面的代码段
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# --------------------------------------------------------------------------------------------
# yum --showduplicates list docker-ce
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
sudo yum install -y containerd
# 启动 docker 时,会启动 containerd
# sudo systemctl status containerd.service
sudo systemctl stop containerd.service
sudo cp /etc/containerd/config.toml /etc/containerd/config.toml.bak
sudo containerd config default > $HOME/config.toml
sudo cp $HOME/config.toml /etc/containerd/config.toml
# 修改 /etc/containerd/config.toml 文件后,要将 docker、containerd 停止后,再启动
sudo sed -i "s#registry.k8s.io/pause#registry.cn-hangzhou.aliyuncs.com/google_containers/pause#g" /etc/containerd/config.toml
# https://kubernetes.io/zh-cn/docs/setup/production-environment/container-runtimes/#containerd-systemd
# 确保 /etc/containerd/config.toml 中的 disabled_plugins 内不存在 cri
sudo sed -i "s#SystemdCgroup = false#SystemdCgroup = true#g" /etc/containerd/config.toml
# containerd 忽略证书验证的配置
# [plugins."io.containerd.grpc.v1.cri".registry.configs]
# [plugins."io.containerd.grpc.v1.cri".registry.configs."192.168.0.12:8001".tls]
# insecure_skip_verify = true
sudo systemctl enable --now containerd.service
# sudo systemctl status containerd.service
# sudo systemctl status docker.service
sudo systemctl start docker.service
# sudo systemctl status docker.service
sudo systemctl enable docker.service
sudo systemctl enable docker.socket
sudo systemctl list-unit-files | grep docker
sudo mkdir -p /etc/docker
# 这段一定要在命令行执行 有的shell有自己的输入框有可能有bug
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://hnkfbj7x.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
# 上面代码到这结束了哈 别复制多了
sudo systemctl daemon-reload
sudo systemctl restart docker
# 查看信息 状态。。。。
sudo docker info
sudo systemctl status docker.service
sudo systemctl status containerd.service
更新源 解决找不到需要下载的依赖问题
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
(5) 添加阿里云k8s镜像仓库以及所需依赖
- 添加阿里云 k8s 镜像仓库
shell
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
# 是否检查 gpg 签名文件
gpgcheck=0
# 是否检查 gpg 签名文件
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
shell
# 设置所需的 sysctl 参数,参数在重新启动后保持不变
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
# 应用 sysctl 参数而不重新启动
sudo sysctl --system
- 安装 k8s 1.25.3 所需依赖
shell
# yum --showduplicates list kubelet --nogpgcheck
# yum --showduplicates list kubeadm --nogpgcheck
# yum --showduplicates list kubectl --nogpgcheck
# 2023-02-07,经过测试,版本号:1.24.0,同样适用于本文章
# sudo yum install -y kubelet-1.24.0-0 kubeadm-1.24.0-0 kubectl-1.24.0-0 --disableexcludes=kubernetes --nogpgcheck
# 如果你看到有人说 node 节点不需要安装 kubectl,其实这种说法是错的,kubectl 会被当做依赖安装,如果安装过程没有指定 kubectl 的版本,则会安装最新版的 kubectl,可能会导致程序运行异常
sudo yum install -y kubelet-1.25.3-0 kubeadm-1.25.3-0 kubectl-1.25.3-0 --disableexcludes=kubernetes --nogpgcheck
# 2022-11-18,经过测试,版本号:1.25.4,同样适用于本文章
# sudo yum install -y kubelet-1.25.4-0 kubeadm-1.25.4-0 kubectl-1.25.4-0 --disableexcludes=kubernetes --nogpgcheck
# 2023-02-07,经过测试,版本号:1.25.5,同样适用于本文章
# sudo yum install -y kubelet-1.25.5-0 kubeadm-1.25.5-0 kubectl-1.25.5-0 --disableexcludes=kubernetes --nogpgcheck
# 2023-02-07,经过测试,版本号:1.25.6,同样适用于本文章
# sudo yum install -y kubelet-1.25.6-0 kubeadm-1.25.6-0 kubectl-1.25.6-0 --disableexcludes=kubernetes --nogpgcheck
# 2023-02-07,经过测试,版本号:1.26.0,同样适用于本文章
# sudo yum install -y kubelet-1.26.0-0 kubeadm-1.26.0-0 kubectl-1.26.0-0 --disableexcludes=kubernetes --nogpgcheck
# 2023-02-07,经过测试,版本号:1.26.1,同样适用于本文章
# sudo yum install -y kubelet-1.26.1-0 kubeadm-1.26.1-0 kubectl-1.26.1-0 --disableexcludes=kubernetes --nogpgcheck
# 2023-03-02,经过测试,版本号:1.26.2,同样适用于本文章
# sudo yum install -y kubelet-1.26.2-0 kubeadm-1.26.2-0 kubectl-1.26.2-0 --disableexcludes=kubernetes --nogpgcheck
# 2023-03-21,经过测试,版本号:1.26.3,同样适用于本文章
# sudo yum install -y kubelet-1.26.3-0 kubeadm-1.26.3-0 kubectl-1.26.3-0 --disableexcludes=kubernetes --nogpgcheck
# 安装最新版,生产时不建议
# sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes --nogpgcheck
systemctl daemon-reload
sudo systemctl restart kubelet
sudo systemctl enable kubelet
- 查看kubelet 看不了无所谓继续往下
shell
# k8s 未初始化时,kubelet 可能无法启动
journalctl -xefu kubelet
# k8s 未初始化时,kubelet 可能无法启动
sudo systemctl status kubelet
已上命令需要在控制面板与node节点执行,并确保没有错误与警告
4.K8S初始化
(1)控制面板初始化
shell
# 执行报错 看本代码段下面的一些代码段解决方案
kubeadm init --image-repository=registry.aliyuncs.com/google_containers
# 指定集群的IP
# kubeadm init --image-repository=registry.aliyuncs.com/google_containers --apiserver-advertise-address=192.168.80.60
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 或者在环境变量中添加:export KUBECONFIG=/etc/kubernetes/admin.conf
# 添加完环境变量后,刷新环境变量:source /etc/profile
kubectl cluster-info
# 初始化失败后,可进行重置,重置命令:kubeadm reset
# 执行成功后,会出现类似下列内容:
# kubeadm join 192.168.80.60:6443 --token f9lvrz.59mykzssqw6vjh32 \
# --discovery-token-ca-cert-hash sha256:4e23156e2f71c5df52dfd2b9b198cce5db27c47707564684ea74986836900107
#
# kubeadm token create --print-join-command
解决 code=exited, status=1/FAILURE的问题方法
shell
# 查看docker驱动
docker info
# 查看kubelet驱动
systemctl show --property=Environment kubelet | cat
# 驱动不一致kubelet不是systemd或者根本找不到
# /etc/systemd/system/kubelet.service.d 或者
# /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf找找
# 找到这行代码
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"
# 修改为
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --cgroup-driver=systemd"
- libseccomp2.4版本升级
还是启动不了
执行 journalctl -xeu kubelet | grep Failed 命令
报错在存在error: code = Unknown desc = failed to create containerd task: failed to create shim task: OCI runtime create failed: unable to retrieve OCI runtime error (open /run/containerd/io.containerd.runtime.v2.task/k8s.io/d4528f7858e66bd6ea88fde71fcc9d9dc3b194d5113ff1b9017bf3376c88143a/log.json: no such file or directory)这种内容
- unable to retrieve OCI runtime解决方案
shell
# 查看当前 libseccomp 版本需要2.4以上
sudo rpm -qa | grep libseccomp
# libseccomp-2.3.3-3.el8.x86_64这个是刚刚查出来的名
sudo rpm -e libseccomp-2.3.3-3.el8.x86_64 --nodeps
# 查看是否删除成功 没有输出版本则成功
sudo rpm -qa | grep libseccomp
# 安装高版本
yum provides libseccomp
# 下面这个版本是执行上面代码查出来的 一定要看好你有什么版本
yum install libseccomp-2.5.1-1.el8.x86_64
# 查看libseccomp版本和 runc信息 libseccomp高于2.4才行
sudo rpm -qa | grep libseccomp
runc --version
# 初始化失败后,可进行重置,重置命令:
kubeadm reset
# 然后在重新开始初始化
(2)查看控制面板信息
shell
# 查看一些面板信息
# 执行完命令可以查看到 coredns-* 的状态是 Pending,nodes 为 NotReady,原因是网络还未配置
kubectl get pods --all-namespaces -o wide
# 查看节点
kubectl get nodes -o wide
- Kubernetes 版本与Calico 版本对应表
- 下载Calico
shell
# 下载
wget --no-check-certificate https://projectcalico.docs.tigera.io/archive/v3.25/manifests/calico.yaml
(3)配置网络
- 查看网卡名称
- 修改 calico.yaml 文件
shell
# 修改 calico.yaml 文件
vim calico.yaml
shell
# 在 - name: CLUSTER_TYPE 下方添加如下内容
- name: CLUSTER_TYPE
value: "k8s,bgp"
# 下方为新增内容
- name: IP_AUTODETECTION_METHOD
value: "interface=网卡名称"
# INTERFACE_NAME=ens33
# sed -i '/k8s,bgp/a \ - name: IP_AUTODETECTION_METHOD\n value: "interface=INTERFACE_NAME"' calico.yaml
# sed -i "s#INTERFACE_NAME#$INTERFACE_NAME#g" calico.yaml
- 配置网络
shell
# 配置网络
kubectl apply -f calico.yaml
# 出现初始化特别慢 查看具体情况
# 查看信息日志 排查或者查看加载缓慢的原因
kubectl -n 'namespace' describe pod 'name'
到此K8S部署完成!
5.K8S后续补充
(1)控制面板(主节点)的坑
shell
# 查看key
kubectl get no -o yaml | grep taint -A 10
# 去除污点 注意注意最后面有这个 - 符号
kubectl taint nodes --all node-role.kubernetes.io/control-plane-

(3)K8S测试-简单部署一个Nginx
- 创建Nginx的yaml
shell
cat > nginx.yaml << EOF
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.23.2
ports:
- containerPort: 80
EOF
cat nginx.yaml
kubectl apply -f nginx.yaml
# 编辑
# kubectl edit deployment nginx-deployment
查看一下面板信息发现已经run起来了 没有起来看上面控制面板的坑的代码
shell
# 控制面板:查看pod,svc
kubectl get pod,svc -o wide
# 发现有两个副本我们需要给nginx设置副本
# 控制面板:设置服务
# 第三个单词deployment 其实就是nginx.yaml的 kind: Deployment
# 第四个单词nginx-deployment 其实就是nginx.yaml的 name: nginx-deployment
kubectl expose deployment nginx-deployment --type=NodePort --name=nginx-service
# 控制面板 再次查看
kubectl get pod,svc -o wide

31505就是我们对外的端口号 他是随机分配的但是也可以自己手动设置 k8s自带负载均衡策略
shell
# namespace是default 的话 可以不写
kubectl 'namespace' edit 'kind' 'name'
二、NFS配置
shell
# 安装 NFS
yum install -y nfs-utils
# 创建用于储存 NFS 的文件夹
mkdir -p /nfs
# 编辑文件
vim /etc/exports
# 加入如下内容
/nfs *(rw,sync,all_squash,anonuid=0,anongid=0)
- 启动 rpcbind
shell
# 查看状态
systemctl status rpcbind.service
# 查看开机自启状态
systemctl list-unit-files | grep rpcbind.service
# 启动
systemctl start rpcbind.service
# 设置开机自启
systemctl enable rpcbind.service
ubuntu 10.0开启配置nfs 服务service nfs start时出现:
Failed to start nfs.service: Unit nfs.service not found.
原因是ubuntu 10.0以上的版本取消了service nfs start。
- 启动 nfs 或者是 nfs-server
shell
# 查看状态
systemctl status nfs.service
sudo service nfs-server status
# 查看开机自启状态
systemctl list-unit-files | grep nfs.service
# 启动
systemctl start nfs.service
sudo service nfs-server start
三、KubeKey
1.需要准备的环境
- 验证三个命令是否能够执行
shell
which sudo
which curl
which openssl
2.依赖项的要求
shell
# 查看是否有socat
socat -V |grep version
# 有的话跳过
yum install socat
# conntrack
sudo sysctl -a | grep conntrack
# 有的话跳过
yum install conntrack
# 查看是否有ebtables
ebtables -L
# 有的话跳过
yum install ebtables
# 查看是否有iptables
iptables -V
# 有的话跳过
yum install iptables
3.KubeKey下载
shell
# 创建文件并进入
mkdir /root/kubesphere && cd /root/kubesphere
# 下载KubeKey
curl -sfL https://get-kk.kubesphere.io | VERSION=v1.2.0 sh -
# 权限不够的话 给kk附加权限
chmod +x kk
四、GitLab部署
配置要求至少需要4G的内存
1.环境调试
- 关闭交换空间和selinux、开启邮件服务(可选)、开放端口
shell
# 查看内存和交换空间
free -h
# 临时关闭 交换空间比较大的话要等一会
sudo swapoff -a
# 永久关闭 先执行临时
sudo sed -i 's/.*swap.*/#&/' /etc/fstab
free -h
# 查看 selinux Disabled的话就是已经关闭了
getenforce
# 临时关闭
cat /etc/selinux/config
sudo setenforce 0
# 永久关闭
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=Disabled/' /etc/selinux/config
cat /etc/selinux/config
# 开启邮件服务
systemctl start postfix
systemctl enable postfix
# 开放端口号
firewall-cmd --zone=public --add-port=443/tcp --permanent
firewall-cmd --zone=public --add-port=22/tcp --permanent
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload
2.下载gitlab依赖包
出现
Failed to synchronize cache for repo 'AppStream', ignoring this repo.
Failed to synchronize cache for repo 'BaseOS', ignoring this repo.
类似这种保存 参考K8S安装中3.(2)里的方法解决
shell
# gitlab-ce 10.x.x以后的版本需要依赖policycoreutils-python
# centos7:
yum install -y curl openssh-server openssh-clients postfix cronie policycoreutils-python
# centos8:
yum install -y curl openssh-server openssh-clients postfix cronie python3-policycoreutils
3.安装gitlab
shell
# 添加官方源
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
# 因为官方源太慢,可以使用国内清华yum源,配置如下
vim /etc/yum.repos.d/gitlab-ce.repo
# 以下是修改内容
name=Gitlab CE Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/
gpgcheck=0
enabled=1
shell
# 自动安装最新版
yum -y install gitlab-ce
# 安装指定版本Gitlab
yum -y install gitlab-ce-x.x.x
4.配置Gitlab
shell
# 查看Gitlab版本
head -1 /opt/gitlab/version-manifest.txt
shell
# 用于查看端口是否被占用
yum install -y lsof
# 没有输出代表没有被占用
lsof -i:80
# 第一次使用配置时间较长 遇到报错往下看
gitlab-ctl reconfigure
5.启动gitlab
shell
# 用于查看端口是否被占用
yum install -y lsof
# 没有输出代表没有被占用
lsof -i:80
# 第一次使用配置时间较长 遇到报错往下看
gitlab-ctl reconfigure
The files belonging to this database system will be owned by user "gitlab-psql".
This user must also own the server process.
STDERR: initdb: error: invalid locale settings; check LANG and LC_* environment variables
---- End output of /opt/gitlab/embedded/bin/initdb -D /var/opt/gitlab/postgresql/data -E UTF8 ----
Ran /opt/gitlab/embedded/bin/initdb -D /var/opt/gitlab/postgresql/data -E UTF8 returned 1
遇到这种报错是因为语言环境不够导致的
shell
# 配置语言环境
# 查看中文环境
locale -a|grep zh
# 执行一下三个命令
yum install glibc-common
yum install -y langpacks-zh_CN
source /etc/locale.conf
# 再次查看有了环境 重新执行初始化命令
locale -a|grep zh
shell
# gitlab-ctl start
# Gitlab 的使用 登录密码啥的继续往下看
# 在浏览器中输入 http://192.168.1.178
gitlab-ctl start
# Gitlab 的使用 登录密码啥的继续往下看
# 在浏览器中输入 http://192.168.1.178
6.密码初始化
shell
# 密码初始化以后改密码都可以这么执行
# 进入数据存储库 耐心等待一会
gitlab-rails console
# 查看id=1是否是root用户
u=User.where(id:1).first
# 设置密码
u.password='密码'
# 确认密码
u.password_confirmation='密码'
# 保存密码 !不是打错了就是有!!!
u.save!
# 退出
exit
五、Maven与Nexus部署
至少需要2G内存
1.环境配置
shell
# 下载gitlab依赖包
# 开放端口号
firewall-cmd --zone=public --add-port=8081/tcp --permanent
firewall-cmd --reload
# 下载maven
yum install -y maven
# 此处应该还要配置jdk环境 但是好像在安装maven的时候jdk已经一起装了
# 验证maven jdk
mvn -version
java -version
# 网络上自动下载文件的工具,它支持http,https,ftp协议,可以使用http代理。
yum -y install wget
出现
Failed to synchronize cache for repo 'AppStream', ignoring this repo.
Failed to synchronize cache for repo 'BaseOS', ignoring this repo.
类似这种保存 参考K8S安装中3.(2)里的方法解决
2.Nexus安装
专业版的nexus收费,下载开源版 Nexus OSS,下载地址为 https://www.sonatype.com/download-oss-sonatype
我找的网盘侠用网盘下的https://download.csdn.net/download/Jiang_bug/87684227?spm=1001.2014.3001.5503
shell
# 解压 我是放在了local
cd /usr/local
tar -zxvf nexus-3.13.0-01-unix.tar.gz
# 启动nexus
cd nexus-3.13.0-01/bin/
./nexus start
初始账号密码 admin admin123
六、Jenkins部署
至少需要4G内存
https://pkg.jenkins.io/redhat-stable/ jenkins官网
1. 环境配置以及安装jenkins
shell
# 开放端口号
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --reload
# 网络上自动下载文件的工具,它支持http,https,ftp协议,可以使用http代理。
yum -y install wget
# 下载jenkins
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
# 下载秘钥
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key
# 需要jdk11
yum install fontconfig java-11-openjdk
# 验证java
java -version
# 安装jenkins 安装报错往下看
yum install jenkins
# 报错用
dnf install jenkins试试
No match for argument: screen
Error: Unable to find a match
出现这种报错 问题应该是没有配置 yum 源,所以解决办法就是:安装 EPEL 源
shell
# 配置yum源
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
2.修改jenkins配置文件
shell
# 查看java的启动路径
which java
# jenkins的默认jdk启动路径/usr/bin/java 如果不是的话继续执行
# 修改 /etc/init.d/jenkins的内容
# candidates找到这个属性吧/usr/bin/java替换成which java的路径或者你所知的jdk路径
3. 启动jenkins
shell
systemctl start jenkins
# 然后可就可以访问http://ip:8080
# 根据提示找到密码所在位置
4.安装插件

七、Harbor部署
内存推荐2G
1. 环境配置
shell
# 开放端口号
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload
# 下载离线安装包:需要翻墙 下载试试
wget https://storage.googleapis.com/harbor-releases/release-1.8.0/harbor-offline-installer-v1.8.0.tgz
# 安装lrzsz
yum -y install lrzsz
安装compose
curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
# 解压文件
tar -zxvf harbor-offline-installer-v1.8.0.tgz
2.安装docker
shell
yum install -y yum-utils device-mapper-persistent-data lvm2 git
# 设置阿里云源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装docker
yum install -y docker-ce
# 启动docker
systemctl start docker
3.修改harbor配置文件
shell
cd /harbor
vim harbor.yml
# 进不去应该这个文件在/root/harbor/harbor.yml
# 进入后吧hostname修改成自己的主机名称
hostname = 192.168.1.200
ui_url_protocol = https(如果要用https这里就需要改,现在我们先不用https,这里不需要改)
4.启动harbor
shell
./install.sh
# 启动报错的话 参考K8S部署4.(1)控制面板解决报错的方法 libseccomp2.4版本升级
初始化密码 admin Harbor12345
扩展:KubeKey方式部署K8S以及KubeShpere
1. 环境配置
完成K8s部署3.步骤中的所有小步骤
shell
# 安装构建用的组件
# 这些安装不上就一直切yum源知道安装成功为止
yum install -y rpm-build gcc-c++
yum install -y socat ebtables ipset ipvsadm conntrack
2.下载KK以及配置KK
shell
export KKZONE=cn
# 网络问题可能下不下来 多执行几次 下载在/root下
curl -sfL https://get-kk.kubesphere.io | VERSION=v3.0.7 sh -
# 给kk增加权限
su - root
sudo chmod +x kk
# 这条可能会失败
./kk create config --with-kubesphere v3.3.2 --with-kubernetes v1.22.12
# 成功就别执行这个
./kk create config --with-kubesphere --with-kubernetes v1.22.12
3. kubsphere配置
shell
# 编辑/root/config-sample.yaml
spec:
hosts:
- {name: '主节点名', address: 192.168.136.134, internalAddress: 192.168.136.134, user: root, password: root}
- {name: '子节点1', address: 192.168.136.135, internalAddress: 192.168.136.135, user: root, password: root}
- {name: '子节点2', address: 192.168.136.136, internalAddress: 192.168.136.136, user: root, password: root}
roleGroups:
etcd:
- '主节点名'
control-plane:
- '主节点名'
worker:
- '子节点1'
- '子节点2'
内部负载均衡 # internalLoadbalancer: haproxy 解除注释
4. 执行配置文件
shell
./kk create cluster -f config-sample.yaml
http://ip:30880 访问地址验证是否启动
初始账号/密码 admin/P@88w0rd