前提准备,基于centos7操作系统
1.主机名规划
序号 | 主机ip | 主机名规划 |
---|---|---|
1 | 10.0.0.30 | kubernetes-master.test.com master |
2 | 10.0.0.35 | kubernetes-node1.test.com node1 |
3 | 10.0.0.36 | kubernetes-node2.test.com node2 |
4 | 10.0.0.37 | kubernetes-node3.test.com node3 |
5 | 10.0.0.10 | kubernetes-register.test.com register |
2.跨主机免密码认证
#生成秘钥对
ssh-keygen -t rsa #跨主机免密码认证
for i in 30 35 36 37 40; do ssh-copy-id root@10.0.0.$i; done#修改hosts
vim /etc/hosts
10.0.0.30 kubernetes-master.test.com master
10.0.0.35 kubernetes-node1.test.com node1
10.0.0.36 kubernetes-node2.test.com node2
10.0.0.37 kubernetes-node3.test.com node3
10.0.0.40 kubernetes-register.test.com register#修改主机名
hostnamectl set-hostname master
ssh root@10.0.0.35 "hostnamectl set-hostname node1"
ssh root@10.0.0.36 "hostnamectl set-hostname node2"
ssh root@10.0.0.37 "hostnamectl set-hostname node3"
ssh root@10.0.0.40 "hostnamectl set-hostname register"
#查看主机名
for i in 30 35 36 37 40; do ssh root@10.0.0.$i "hostname"; done
3.Swap环境配置(所有主机操作)
#临时禁用
swapoff -a
#永久禁用
sed -i 's/.*swap.*/#&/' /etc/fstab
#内核参数调整
cat >> /etc/sysctl.d/k8s.conf << EOF
vm.swappiness=0
EOF
sysctl -p /etc/sysctl.d/k8s.conf
4.网络参数调整(所有主机操作)
#配置iptables参数,使得流经网桥的流量也经过iptables/netfilter防火墙
cat >> /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
#配置生效
modprobe br_netfilter
modprobe overlay
sysctl -p /etc/sysctl.d/k8s.conf
或(for i in 30 35 36 37 40; do scp /etc/sysctl.d/k8s.conf root@10.0.0.$i:/etc/sysctl.d/k8s.conf ;ssh root@10.0.0.$i "modprobe br_netfilter;modprobe overlay;sysctl -p /etc/sysctl.d/k8s.conf"; done)
5.部署docker软件源(所有主机操作)
#定制软件源
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#如果yum下载有问题,可以先换源(阿里源)
cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all
yum makecache
#安装最新版
yum list docker-ce --showduplicates | sort -r
yum install -y docker-ce
systemctl enable docker
systemctl start docker
或者(for i in 30 35 36 37 40; do ssh root@10.0.0.$i "yum install -y docker-ce;systemctl enable docker;systemctl start docker"; done)
6.docker加速器配置(除了register,其他都需要配置)使用xshell或者MobaXterm多窗口输入
#配置加速器文件
cat >> /etc/docker/daemon.json <<-EOF
{"registry-mirrors": ["http://xxxxx阿里云",], "insecure-registries": ["kubernetes-register.test.com"], "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
#重启docker服务
systemctl restart docker
#查看docker 26.1.4
docker info
7.获取软件(除了register,其他都需要)
#下载软件
mkdir /data/softs -p && cd /data/softs
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.4.0/cri-dockerd-0.4.0.amd64.tgz
#解压软件
tar xf cri-dockerd-0.4.0.amd64.tgz
mv cri-dockerd/cri-dockerd /usr/local/bin/
或者(for i in 30 35 36 37 ; do scp cri-dockerd/cri-dockerd root@10.0.0.$i:/usr/local/bin/; done
)
#检查效果
cri-dockerd --version
8.定制配置文件(除了register,其他都需要)
cat > /etc/systemd/system/cri-dockerd.service<<-EOF
[Unit]
Description=CRI Interface for Docker Application Container Engine
Documentation=https://docs.mirantis.com
After=network-online.target firewalld.service docker.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/local/bin/cri-dockerd --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.9--network-plugin=cni --cni-conf-dir=/etc/cni/net.d --cni-bin-dir=/opt/cni/bin --container-runtime-endpoint=unix:///var/run/cri-dockerd.sock --cri-dockerd-root-directory=/var/lib/dockershim --docker-endpoint=unix:///var/run/docker.sock --cri-dockerd-root-directory=/var/lib/docker
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process
[Install]
WantedBy=multi-user.target
EOF
#定制配置
cat > /etc/systemd/system/cri-dockerd.socket <<-EOF
[Unit]
Description=CRI Docker Socket for the API
PartOf=cri-docker.service[Socket]
ListenStream=/var/run/cri-dockerd.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker[Install]
WantedBy=sockets.target
EOF
#传输文件并设置服务开机自启动
for i in 30 35 36 37 ; do scp /etc/systemd/system/cri-dockerd.service root@10.0.0.$i:/etc/systemd/system/cri-dockerd.service; done
for i in 30 35 36 37 ; do scp /etc/systemd/system/cri-dockerd.socket root@10.0.0.$i:/etc/systemd/system/cri-dockerd.socket; donefor i in 30 35 36 37 ; do ssh root@10.0.0.$i "systemctl daemon-reload;systemctl enable cri-dockerd.service;systemctl restart cri-dockerd.service"; done
9.harbor仓库操作(在register操作)
#安装docker-compose v2.35.1
yum install -y docker-composemkdir /data/{softs,server} -p && cd /data/softs
#如果出现下面情况,需要手动下载离线包,网址:https://github.com/docker/compose/releases/download/v2.35.1/docker-compose-linux-x86_64,使用xftp传到/usr/local/bin下
没有可用软件包 docker-compose。
错误:无须任何处理
或(curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
)#修改权限
chmod +x /usr/local/bin/docker-compose#验证
docker-compose version
#下载软件wget https://github.com/goharbor/harbor/releases/download/v2.5.3/harbor-offline-installer-v2.5.3.tgz#解压软件
tar xf harbor-offline-installer-v2.5.3.tgz -C /data/server/cd /data/server/harbor/#加载镜像
docker load < harbor.v2.5.3.tar.gz#备份配置
cp harbor.yml.tmpl harbor.yml
#修改配置
vim harbor.yml# 修改主机名hostname: kubernetes-register.test.comhttp:port: 80#https: 注释ssl相关的部分# port: 443# certificate: /your/certificate/path# private_key: /your/private/key/path# 修改harbor的登录密码harbor_admin_password: 123456# 设定harbor的数据存储目录data_volume: /data/server/harbor/data
#配置harbor
./prepare#启动harbor
./install.sh#检查效果
docker-compose ps#关闭
docker-compose down
#定制服务启动文件
vim /etc/systemd/system/harbor.service[Unit]
Description=Harbor
After=docker.service systemd-networkd.service systemd-resolved.service
Requires=docker.service
Documentation=http://github.com/vmware/harbor[Service]
Type=simple
Restart=on-failure
RestartSec=5
#需要注意harbor的安装位置
ExecStart=/usr/local/bin/docker-compose --file /data/server/harbor/docker-compose.yml up
ExecStop=/usr/local/bin/docker-compose --file /data/server/harbor/docker-compose.yml down[Install]
WantedBy=multi-user.target#加载服务配置文件
systemctl daemon-reload
#设置开机自启动
systemctl enable harbor
#启动服务
systemctl start harbor
#检查状态
systemctl status harbor
#harbor仓库定制
浏览器访问域名(10.0.0.40),用户名: admin, 密码:123456 创建test用户专用的项目仓库,名称为 test,权限为公开
10.进行harbor仓库测试(master操作)
#下载镜像,使用 国内镜像源
docker pull docker.1ms.run/nginx:latest
docker pull docker.1ms.run/tomcat:latest#查看版本
docker history docker.1ms.run/nginx:latest
docker history docker.1ms.run/tomcat:latest#定制镜像标签
docker tag docker.1ms.run/nginx:latest kubernetes-register.test.com/test/nginx:1.27.5 docker tag docker.1ms.run/tomcat:latest kubernetes-register.test.com/test/tomcat:11.0.6#登录仓库
docker login kubernetes-register.test.com -u test
Password: #输入密码 #推送镜像
docker push kubernetes-register.test.com/test/nginx:1.27.5
docker push kubernetes-register.test.com/test/tomcat:11.0.6
11.初始化(除了register)
#关闭和禁用防火墙
systemctl stop firewalld
systemctl disable firewalld#临时关闭selinux
setenforce 0
#定制阿里云的关于kubernetes的软件源
cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/repodata/repomd.xml.key
EOF#更新软件源
yum makecache fast
#软件部署
yum install kubeadm kubectl kubelet -y
#自启动
systemctl enable kubelet && systemctl start kubelet
#查看版本
kubeadm version#检查镜像文件列表
kubeadm config images list
#在harbor创建google_containers仓库,权限为公开的
浏览器访问域名(10.0.0.40),用户名: test, 密码:xxxxxx
创建test用户专用的项目仓库,名称为 google_containers,权限为公开
#获取镜像文件(网络情况不好可以多做几次)
images=$(kubeadm config images list --kubernetes-version=1.28.15 | awk -F "/" '{print $NF}')
for i in ${images}
dodocker pull registry.aliyuncs.com/google_containers/$idocker tag registry.aliyuncs.com/google_containers/$i kubernetes-register.test.com/google_containers/$idocker push kubernetes-register.test.com/google_containers/$idocker rmi registry.aliyuncs.com/google_containers/$i
done
#环境初始化命令
kubeadm init --kubernetes-version=1.28.15 --apiserver-advertise-address=10.0.0.30 --image-repository=kubernetes-register.test.com/google_containers --pod-network-cidr="10.244.0.0/16" --service-cidr="10.96.0.0/12" --ignore-preflight-errors=Swap --cri-socket=unix:///var/run/cri-dockerd.sock --v=5
#复制join命令,加入到master集群,使用master上的命令
kubeadm join 10.0.0.12:6443 --token XXXXXX --discovery-token-ca-cert-hash xxxxxx --cri-socket=unix:///var/run/cri-dockerd.sock --v=5
12.收尾(在master操作)
#定制kubernetes的登录权限
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
#网络定制
mkdir /data/kubernetes/flannel -p
cd /data/kubernetes/flannel
#获取配置文件
wget https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
#备份配置文件
cp kube-flannel.yml{,.bak}
#定制镜像标签
docker tag ghcr.io/flannel-io/flannel:v0.26.7 kubernetes-register.test.com/test/flannel:v0.26.7
docker tag ghcr.io/flannel-io/flannel-cni-plugin:v1.6.2-flannel1 kubernetes-register.test.com/test/flannel-cni-plugin:v1.6.2-flannel1
docker push kubernetes-register.test.com/test/flannel:v0.26.7
docker push kubernetes-register.test.com/test/flannel-cni-plugin:v1.6.2-flannel1
或(for i in $(grep image kube-flannel.yml | grep -v '#' | awk -F '/' '{print $NF}')
dodocker pull ghcr.io/flannel-io/$idocker tag ghcr.io/flannel-io/$i kubernetes-register.test.com/test/$idocker push kubernetes-register.test.com/test/$i
done)
#修改配置文件
sed -i '/ image:/s/ghcr.io\/flannel-io/kubernetes-register.test.com\/test/' kube-flannel.yml
#查看
grep image kube-flannel.yml
#应用配置文件
kubectl apply -f kube-flannel.yml
#检查效果
kubectl get node