微服务 & 云原生:搭建 K8S 集群

为节约时间和成本,仅供学习使用,直接在两台虚拟机上模拟 K8S 集群搭建

踩坑之旅

系统环境:CentOS-7-x86_64-Minimal-2009 镜像,为方便起见,直接在 root 账户下操作,现实情况最好不要这样做。

基础准备

1. 关闭防火墙

systemctl disable firewalld
systemctl stop firewalld

2. 关闭 seLinux

# 临时禁用selinux
setenforce 0

# 永久关闭selinux 
sed -i 's/SELINUX=permissive/SELINUX=disabled/' /etc/sysconfig/selinux
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

3. 禁用 Swap

# 临时关闭 Swap
swapoff -a

# 永久禁用 Swap
vi /etc/fstab
在swap分区这行前加 # 注释掉
#/dev/mapper/centos-swap swap

4. 设置存储库

# 安装 yum-utils 包, 并设置稳定存储库
yum install -y yum-utils
yum-config-manager --add-repo https://download.Docker.com/linux/centos/docker-ce.repo

5. 安装配置 Docker

# 查看docker-ce支持版本
yum list docker-ce --showduplicates|sort -r

#查看docker-ce-cli版本
yum list docker-ce-cli --showduplicates|sort -r

# 指定版本号安装
#yum install -y docker-ce-24.0.4 docker-ce-cli-24.0.4 containerd.io

# 默认安装最新版本
yum install docker-ce docker-ce-cli containerd.io

# 启动 Docker
systemctl enable docker && systemctl start docker

# 查看版本
docker -v

# 配置国内镜像源,修改/新建 daemon.json
vi /etc/docker/daemon.json

# 在 daemon.json 中添加:
{
        "registry-mirrors": [
                "https://registry.docker-cn.com",
                "https://docker.mirrors.ustc.edu.cn",
                "http://hub-mirror.c.163.com",
                "https://cr.console.aliyun.com/"
        ]
}

# 重启 Docker
systemctl restart docker

6. 安装 Docker Compose

# 下载 Docker Compose
sudo curl -L https://Github.com/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

# 对二进制文件添加可执行权限
chmod +x /usr/local/bin/docker-compose

# 查看版本
docker-compose -v

最好使用 GitHub 的地址,如果使用其他比如:

curl -L "https://get.daocloud.io/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

有几率会出现下面错误:

/usr/local/bin/docker-compose: line 1: html: No such file or directory
/usr/local/bin/docker-compose: line 2: syntax error near unexpected token `<'
'
usr/local/bin/docker-compose: line 2: `<head><title>502 Bad Gateway</title></head>

搭建 K8S 集群

1. 修改 K8S 源

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/rpm-package-key.gpg
EOF

基础环境搭建完成后,令当前虚拟机做 Master 主机,利用虚拟机平台,比如 VMWare、VirtualBox 等的克隆功能,克隆一台 Worker 主机(当然也可以克隆多台)。

注意,克隆后的多台主机要保证 ip 不同,不同软件的操作不同,具体操作此处此处不做赘述。

2. Master 端安装 kubeadm、kubectl、kubelet

# 安装指定版本
# yum install -y kubeadm-1.21.3 kubelet-1.21.3 kubectl-1.21.3

# 默认安装
yum install -y kubectl kubeadm kubelet

# 启动 kubelet 服务
systemctl enable kubelet && systemctl start kubelet

# 查看版本
docker-compose version

3. Worker 端安装 kubeadm、kubelet

# 安装
yum install -y kubeadm kubelet

# 启动 kubelet 服务
systemctl enable kubelet && systemctl start kubelet

4. 启动容器运行时 containerd

# Master 端和 Worker 端都要操作
mv /etc/containerd/config.toml /etc/containerd/config.bak
containerd config default | sudo tee /etc/containerd/config.toml
systemctl restart containerd

5. 配置主机名,需要同时在 Master 和 Worker 上操作

Master 节点下:

# 编辑 hosts,添加各个节点的映射
vi /etc/hosts

# 我的 Master 主机 ip 为 192.168.65.130,Worker 主机 ip 为 192.168.65.132
192.168.65.132 k8s-node1
192.168.65.130 k8s-master

# Master 节点
hostnamectl --static set-hostname k8s-master

# 立刻生效
hostname $hostname

Worker 节点下:

vi /etc/hosts

192.168.65.132 k8s-node1
192.168.65.130 k8s-master

# Worker 节点
hostnamectl --static set-hostname k8s-node1

# 立刻生效
hostname $hostname

6. 初始化 Master 节点

# 仅在 Master 主机上执行:
kubeadm init 
--image-repository registry.aliyuncs.com/google_containers 
--apiserver-advertise-address=192.168.65.130 
--service-cidr=10.96.0.0/12 
--pod-network-cidr=10.244.0.0/16 
--token-ttl 0
  • –apiserver-advertise-address=192.168.65.130,master 主机的 IP 地址

  • –image-repository=registry.aliyuncs.com/google_containers,这个是镜像地址

  • –service-cidr=10.96.0.0/12,IP 地址直接就套用10.96.0.0/12

  • –pod-network-cidr=10.244.0.0/16,K8S 内部的 pod 节点之间网络可以使用的 IP 段,是可以更改的,暂时用 10.244.0.0/16 也无所谓

初始化完成后结果如下:

微服务 & 云原生:搭建 K8S 集群

将这里提示的 kubeadm join xxx 命令保存下来,如果忘记了也可以通过下面命令查看:

kubeadm token create --print-join-command

继续执行:

mkdir -p ~/.kube
sudo cp -i /etc/kubernetes/admin.conf ~/.kube/config
sudo chown $(id -u):$(id -g) ~/.kube/config

7. 将 Worker 加入到 Master 节点

# Worker 端,使用上一步得到的 join 命令
kubeadm join 192.168.65.130:6443 --token 4olf44.2t6sqev73d6ewm48 --discovery-token-ca-cert-hash sha256:3603cf3bd9efa671e95a93f922f097580b1ffbfe3e55ca8b7f1876bf8fc4be69

成功后的提示如下:

微服务 & 云原生:搭建 K8S 集群

这一步可能报错

[ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1

解决办法:

echo "1" >/proc/sys/net/bridge/bridge-nf-call-iptables

8. Master 端安装 Calico 网络插件

注意,Calico 的版本需要与 kubelet 匹配,适配关系在 Calico 每个版本的说明都有,比如我的 kubelet 是 1.21.3,满足此版本的 Calico 有 3.20、3.21:

微服务 & 云原生:搭建 K8S 集群
  • https://docs.tigera.io/archive/v3.20/getting-started/kubernetes/requirements
# 下载 calico.yaml 到本地
curl https://docs.projectcalico.org/v3.20/manifests/calico.yaml -O

# 执行
kubectl apply -f calico.yaml
微服务 & 云原生:搭建 K8S 集群

9. 查看节点、pod 状态

# 查看 nodes
kubelet get node

# 查看 pods
kubectl get pods -n kube-system -o wide

一开始节点处于 NotReady 状态:

微服务 & 云原生:搭建 K8S 集群

相关的 coredns 等也在启动中:

微服务 & 云原生:搭建 K8S 集群

经过一段时间后,可以看到,所有 pods 均已启动(running),节点已就绪(Ready):

微服务 & 云原生:搭建 K8S 集群
来源:blog.csdn.net/by6671715/article/details/131732459
后端专属技术群

构建高质量的技术交流社群,欢迎从事编程开发、技术招聘HR进群,也欢迎大家分享自己公司的内推信息,相互帮助,一起进步!

文明发言,以交流技术职位内推行业探讨为主

广告人士勿入,切勿轻信私聊,防止被骗

微服务 & 云原生:搭建 K8S 集群

加我好友,拉你进群

原文始发于微信公众号(Java笔记虾):微服务 & 云原生:搭建 K8S 集群

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/158313.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!