centos7搭建kubernetes集群(Containerd作为运行时)
在centos虚拟机集群搭建k8s,Containerd作为容器运行时
·
集群配置
节点名称 | 内存 | 硬盘 | 处理器内核总数 | ip |
---|---|---|---|---|
master | 6GB | 40GB | 6 | 192.168.67.166 |
node1 | 6GB | 40GB | 6 | 192.168.67.167 |
node2 | 6GB | 40GB | 6 | 192.168.67.168 |
一、所有节点更改镜像源
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
二、所有节点安装docker,注意:K8s在1.24以上版本将不再直接支持Docker,因此需要将Kubernetes的Runtime改为Containerd。(安装Docker时会自动安装Containerd)
-- Docker CE 的软件源信息添加到 YUM 软件包管理器的配置中,系统默认镜像不包含docker-ce
yum install -y yum-utils
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
-- 卸载旧版本
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
-- 下载docker-ce
sudo yum install -y docker-ce-20.10.* docker-ce-cli-20.10.*
-- 配置镜像加速https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://sfpt7y1n.mirror.aliyuncs.com"],
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
三、所有节点对系统进行配置修改
-- 禁用selinux,让容器可以读取主机文件系统
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久
-- 关闭swap分区
sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久
-- 重启生效
reboot
-- 关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
-- 配置hosts
sudo tee -a /etc/hosts <<EOF
192.168.67.166 master
192.168.67.167 node1
192.168.67.168 node2
EOF
四、所有节点配置k8s的yum仓库
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
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
EOF
-- 导入密钥
rpm --import https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
rpm --import https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
五、所有节点安装kubelet,kubeadm,kubelet
yum install -y kubelet-1.25.1-0 kubeadm-1.25.1-0 kubectl-1.25.1-0
六、master节点执行
-- 生成kubeadm配置模板
kubeadm config print init-defaults > kubeadm-config.yaml
-- 编辑此配置文件
-- 修改advertiseAddress字段为本机地址
-- 检查criSocket地址是否为下图中所示
-- 检查kubernetesVersion,应与kubeadm version查询得到的版本一致
-- 将imageRepository字段改为registry.cn-hangzhou.aliyuncs.com/google_containers
-- 将name字段改为当前master节点的名字
vi kubeadm-config.yaml
– master节点执行kubeadm config images list
查看所需下载镜像
-- 更改镜像地址,拉取每个镜像
systemctl start docker
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.25.16
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.25.16
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.25.16
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.25.16
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.8
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.4-0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.9.3
七、Containerd作为容器运行时(所有节点执行)
-- 所有节点配置Containerd所需模块,确保在系统启动时自动加载这两个内核模块
cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF
-- 所有节点加载模块
modprobe -- overlay
modprobe -- br_netfilter
-- 所有节点配置Containerd所需内核,为 Kubernetes 的 CRI 和相关网络功能提供支持
cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF
-- 所有节点加载内核
sysctl --system
-- 所有节点配置Containerd的配置文件
mkdir -p /etc/containerd
containerd config default | tee /etc/containerd/config.toml
-- 将containerd.runtimes.runc.options中的SystemdCgroup字段修改为true
-- tips:进入vi编辑器,按下Esc,底部栏输入 /SystemdCgroup 即可快速定位
-- 接下来将sandbox_image的Pause镜像修改为适合自己版本的地址,可参考第6步中Pause的地址
-- 修改完这两处后保存退出
vi /etc/containerd/config.toml
-- 所有节点设置Containerd开机启动
systemctl daemon-reload
systemctl enable --now containerd
systemctl restart containerd
-- 所有节点配置crictl客户端连接的Runtime位置
cat > /etc/crictl.yaml <<EOF
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint:unix:///run/containerd/containerd.sock
timeout:10
debug:false
EOF
八、初始化集群(master节点执行)
-- containerd作为runtime,设置开机自启
systemctl enable --now kubelet
kubeadm init --config kubeadm-config.yaml
-- 若初始化失败,需要检查各项配置是否正确,之后再次初始化,清理命令如下
kubeadm reset -f ; ipvsadm --clear ; rm -rf ~/.kube
初始化成功后如下所示:(注意框出的部分)
-- 在master节点执行上图框出的第一部分:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
-- 在其余node节点执行框出的第二部分:
kubeadm join 192.168.67.166:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:4f35a9073247215976789e99c5f274e8bac36b88b8264252daf60dfd85c16b4b
在master节点输入kubectl get node,显示NotReady,说明就差配置网络了
现在配置网络,以calico为例(https://docs.tigera.io/calico/3.25/getting-started/kubernetes/self-managed-onprem/onpremises)
-- 获取官方模板,在master节点执行
curl https://raw.githubusercontent.com/projectcalico/calico/v3.25.2/manifests/calico.yaml -O
kubectl apply -f calico.yaml
等一小会,再次执行kubectl get node
安装Metrics
-- 拉取官方模版
wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
-- 打开模版
-- 将image换成阿里云镜像:
image: registry.aliyuncs.com/google_containers/metrics-server:v0.6.4
-- 在args添加下面两行:注意空格与对齐
- --kubelet-insecure-tls
- --kubelet-preferred-address-types=InternalDNS,InternalIP,ExternalDNS,ExternalIP,Hostname
-- 安装
kubectl apply -f components.yaml
在这里插入图片描述
参考资料
《云原生Kubernetes全栈架构师》-杜宽
更多推荐
已为社区贡献5条内容
所有评论(0)