虚机规格
虚机名称 | IP | 规格 | 操作系统 |
---|---|---|---|
master01 | 192.168.164.130 | 2C4G | CentOS 7.9 |
worker01 | 192.168.164.131 | 1C4G | CentOS 7.9 |
worker02 | 192.168.164.132 | 1C4G | CentOS 7.9 |
harbor | 192.168.164.133 | 1C4G | CentOS 7.9 |
网络拓扑
集群中包含一个Harbor、一个master、两个worker,其中Harbor作为自建镜像仓库,通过docker-compose启动服务并向集群提供镜像下载、上传功能。master和worker节点组成k8s集群,搭建完毕后,提供原生云的相关功能。
安装Harbor(本节操作都在Harbor节点上执行)
我们安装Harbor时,使用官方提供相关部署工具进行安装,部署依赖docker及docker-compose,需要先安装docker及docker-compose
- 安装docker
使用docker的yum源安装docker及docker依赖。
yum install -y yum-utils
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y
- docker-compose安装
通过github连接下载,选择最新版本,当前的最新版本是v2.15.1,选择linux x86CPU架构的release。如果下载不到,我已经将release包上传到资源里,可以下载。博文最后为资源连接。
下载完毕后,将docker-compose拷贝至/usr/local/bin/目录,并设置可执行权限。
cp /root/software/docker-compose-linux-aarch64 /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
- 安装Harbor
通过github链接下载Harbor最新的release版本,当前最新版本是v2.6.3。Harbor的镜像同样也上传至资源,可在博文最后查找资源链接。
下载完毕安装包,将安装包上传至harbor机器,修改配置,完成安装。
tar -xvf harbor-offline-installer-v2.6.3.tgz
cd harbor/
cp harbor.yml.tmpl harbor.yml
vi harbor.yml
修改主机的监听IP及Harbor登录密码,将Https的相关注释去掉,Harbor默认的用户及密码是admin/Harbor12345。
执行安装命令进行安装。
./install.sh
通过连接http://1921.168.164.133访问Harbor,服务正常。点击“项目”,增加google_containers和rancher两个项目。这两个项目用于保存后续安装k8s集群和CNI的镜像。
安装K8s集群
本次安装不涉及IPVS及时钟源的安装。因为是自己测试的环境,不涉及大规模的商用问题,不需要使用IPVS来实现kube-proxy功能,采用iptables即可。所有的虚机都运行在同一个windows机器上,通过vmware虚拟的,时钟源是一致的。
- 设置基本配置(master节点及worker节点都执行)
基本配置包含配置设置主机名、域名、关闭防火墙、禁用swap分区以及网桥及地址转发功能。
设置各虚机主机名:
hostnamectl set-hostname master01 # master01上执行
hostnamectl set-hostname worker01 # worker01上执行
hostnamectl set-hostname worker02 # worker02上执行
设置域名
在master及worker都执行。
192.168.164.130 master01
192.168.164.131 worker01
192.168.164.132 worker02
192.168.164.133 registry.coder.workspace.com
禁用selinux和firewalld服务
在master及worker都执行。
#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
#关闭selinux服务
setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config
禁用swap分区
在master及worker都执行。
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab
添加网桥过滤和地址转发功能
在master及worker都执行。
cat > /etc/sysctl.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_nonlocal_bind = 1
net.ipv4.ip_forward = 1
vm.swappiness=0
EOF
sysctl -p
- 安装docker
在master及worker都执行。
安装docker依赖
yum install -y yum-utils
配置yum安装docker的yum源
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
安装docker
yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y
- 配置docker
在master及worker都执行。
vi /etc/systemd/system/docker.service
[Unit]
Description=Docker Application Container Engine
Documentation=http://docs.docker.com
After=network.target
[Service]
Type=notify
Environment=GOTRACEBACK=crash
ExecReload=/bin/kill -s HUP $MAINPID
Delegate=yes
KillMode=process
ExecStart=/usr/bin/dockerd \
--insecure-registry=registry.coder.workspace.com --registry-mirror=https://registry.docker-cn.com --registry-mirror=https://mirror.aliyuncs.com --exec-opt native.cgroupdriver=systemd \
--dns 10.233.0.3 --dns 8.8.8.8 --dns-search default.svc.cluster.local --dns-search svc.cluster.local --dns-opt ndots:2 --dns-opt timeout:2 --dns-opt attempts:2
LimitNOFILE=1048576
LimitNPROC=1048576
LimitCORE=infinity
TimeoutStartSec=1min
##restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
配置完毕后,执行下面命令
systemctl daemon-reload
systemctl enable docker
systemctl start docker
docker login registry.coder.workspace.com
- 安装kubeadm kubectl kubelet
在master及worker都执行。
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
yum install -y kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6
systemctl enable kubelet
- 初始化master节点
上传镜像
在master执行。
搭建k8s依赖的etcd、kube-proxy、flannel、kube-apiserver、kube-controller-manager、coredns都在这个镜像images-registry.coder.workspace.com.tar.gz中。镜像已经上传至资源,请关注博文后面的资源连接。
docker load -i images-registry.coder.workspace.com.tar.gz
docker push registry.coder.workspace.com/rancher/mirrored-flannelcni-flannel-cni-plugin:v1.1.0
docker push registry.coder.workspace.com/rancher/mirrored-flannelcni-flannel:v0.19.1
docker push registry.coder.workspace.com/library/nginx:latest
初始化master节点
kubeadm init \
--apiserver-advertise-address=192.168.164.130 \
--image-repository registry.coder.workspace.com/google_containers \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16
删除线,可以不参考 begin
也可使用kubeadm.conf文件部署
kubeadm config images pull --config kubeadm.conf
修改kubeadm.conf
kubeadmin init --config kubeadm.conf
删除线,可以不参考 end
拷贝k8s管理员权限文件。默认在用户家目录/.kube/config下查找改文件,没有则不能无法查看k8s的信息。
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
初始化woker节点
使用初始化master节点后回显信息里面的kubeadm join命令分别在worker节点上执行
初始化CNI网络
查看集群状态
kubectl get node
初始化CNI网络
kubectl apply -f kube-flannel.yml
稍等一会,节点全部变为Ready状态。
安装一个nginxi服务,查看服务是否可用。