官方网站:https://kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
1. 集群部署
1.1 环境
主机 | IP |
---|---|
k8s1 | 192.168.1.20 |
k8s2 | 192.168.1.21 |
k8s3 | 192.168.1.22 |
k8s4 | 192.168.1.23 |
- 关闭节点的selinux和iptables防火墙
- 所有节点部署docker引擎
- 将k8s2作为master节点,k8s3和k8s4作为从节点
1.2 harbor仓库的搭建[k8s1]
下载并解压离线安装包
首先配置好docker仓库,若不会配置,可以参考该文章中配置方法:https://blog.csdn.net/m0_37868230/article/details/106862267#t6
下载docker-ce并设置为开机自启
yum install -y docker-ce
systemctl start docker.service
systemctl enable docker.service
查看docker信息
docker info
消除docker中存在的警告,将bridge-nf-call-iptables和bridge-nf-call-ip6tables开启
vim /etc/sysctl.conf
###
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
###
sysctl --system # 生效
可以看到,警告已经消除,可正常使用。
编辑harbor配置文件
vim harbor.yml
运行检测环境
./install.sh
可以看到,缺少 docker-compose[单台主机上维护多个容器] 环境
下载并搭建docker-compose环境
mv docker-compose-Linux-x86_64-1.24.1 /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
1.3 三个节点docker-ce的下载和安装
这里可以使用之前自己的docker,也可以使用清华或者阿里的docker。
安装系统工具
yum install -y yum-utils device-mapper-persistent-data lvm2
部署docker仓库
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装docker-ce
报错,查看错误信息是缺少不低于2:2.74版本的container-selinux
下载container-selinux并安装
将安装包上传到共享仓库上
更新仓库repo数据
在k8s1将docker.repo复制给k8s3和k8s4
scp docker-ce.repo k8s3:/etc/yum.repos.d/
在k8s3和k8s4安装docker
yum install -y docker-ce
启用,使其 docker info 正常使用
vim /etc/sysctl.conf
###
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
###
sysctl --system # 生效
启动并设置为开机自启
systemctl enable --now docker.service
1.4 kubernetes部署
官方网站:https://kubernetes.io/zh/docs/setup/production-environment/container-runtimes/#docker
1.4.1 安装部署kubernetes前系统环境的配置
- 设置docker守护程序[三个节点都需要]
修改k8s2中docker守护程序
cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
]
}
EOF
重点:native.cgroupdriver 修改为 systemd 模式
原先的模式为:
重启docker
systemctl restart docker.service
可以看到,Cgroup Driver 已经修改为 systemd 的模式
将文件复制到k8s3和k8s4上,并重启docker
- 禁用swap[三个k8s集群节点都需要]
swapoff -a
vim /etc/fstab
###
#/dev/mapper/rhel-swap swap swap defaults 0 0
###
1.4.2 部署kubernetes
安装Docker-ce
这个前面已经进行了详细的介绍
设置仓库[三个节点均设置]
vim /etc/yum.repos.d/k8s.repo
###
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7- x86_64/
enabled=1
gpgcheck=0
###
安装软件包[三个节点均安装]
yum install -y kubelet kubeadm kubectl
开启服务并设置开机自启
systemctl enable --now kubelet
1.4.3 master节点从外网拉取镜像
创建集群前的准备:
- 一台或多台运行兼容deb / rpm的Linux操作系统的计算机
- 每台主机至少要分配2GB内存空间
- 用作master节点的计算机上至少有2个CPU
- 集群中所有主机需要能够联网
查看默认的配置信息
kubeadm config print init-defaults
列出所需镜像
kubeadm config images list # 列出所需镜像
kubeadm config images list --image-repository registry.aliyuncs.com/google_containers # 指定镜像仓库位置并列出所需镜像
可以看到,kubeadm默认读取的是k8s.gcr.io镜像库。但事实上,当前我们无法直接访问到k8s.gcr.io镜像库,需要翻墙才可以。因此我们就需要去指定镜像库,这里我们使用阿里云的镜像库
拉取镜像
kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers
这里出现了报错。查看错误信息,是因为我使用的k8s是最新的,远程仓库中没有更新。
指定版本去拉取
kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers --kubernetes-version 版本号
可以看到,镜像已经拉取成功
1.4.4 将master拉取的镜像上传到私有仓库
harbor主机[k8s1]将证书传给master节点主机[k8s2]
master节点主机登陆reg.harbor.com
docker login reg.harbor.com
将镜像上传到仓库
for i in `docker images | grep registry | awk '{print $1":"$2}' | awk -F '/' '{print $3}'`; do
> docker tag registry.aliyuncs.com/google_containers/$i reg.harbor.com/library/$i;
> docker push reg.harbor.com/library/$i
> done
登陆harbor仓库查看
将证书传给另外两个节点,以便用来拉取镜像
删除阿里云仓库镜像,只保留私有仓库镜像
for i in `docker images | grep registry.aliyuncs.com | awk '{ print $1":"$2 }'`; do docker rmi $i; done
1.4.5 集群部署
初始化集群
–pod-network-cidr=10.244.0.0/16 # 使用flannel网络组件时必须添加
kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository reg.harbor.com/library
报错,找不到版本1.18.5,默认是找软件版本,和我们实际版本不一致,指定版本 --kubernetes-version v1.18.3
kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository reg.harbor.com/library --kubernetes-version v1.18.3 --ignore-preflight-errors=NumCPU
节点扩容
kubeadm join 192.168.1.21:6443 --token ywa2ks.u6je272aslskl73x \
--discovery-token-ca-cert-hash sha256:e1d4464a12968a663aefd51550a346f5da195550e7bc9869e109d37622f6bfb5
上图为初始化成功时最后系统打印的信息,将红框部分内容在其他节点运行(k8s3,k8s4)
注意,这里的token会过期(默认24小时)过期后其他节点要加入时需要生成新的token
kubeadm token create
配置kubectl
**创建一个普通用户**
useradd kubeadm
这里要注意:需要对普通用户权限进行设置
visudo
###
kubeadm ALL=(ALL) NOPASSWD:ALL
###
su - kubeadm
mkdir -p $HOME/.kube #创建目录
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
**使用超级用户**
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
我使用的是root用户,可以创建普通用户,然后通过sudo授权,关键在/etc/kubernetes/admin.conf文件
kubectl get node ##配置完成后查看节点
kubectl get all
配置kubectl命令补齐功能
echo "source <(kubectl completion bash)" >> ~/.bashrc
source ~/.bashrc
安装flannel网络组件
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
其他网络组件:[https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create- cluster-kubeadm/#pod-network](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create- cluster-kubeadm/#pod-network)
Master查看状态
kubectl get cs
kubectl get nodes
若node节点显示notready,参考该文章:https://www.cnblogs.com/lph970417/p/11805934.html
kubectl get pod -n kube-system