文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-09-08 08:34

关注

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

踩坑之旅

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

  1. 关闭防火墙
systemctl disable firewalldsystemctl stop firewalld
  1. 关闭 selinux
# 临时禁用selinuxsetenforce 0# 永久关闭selinux sed -i 's/SELINUX=permissive/SELINUX=disabled/' /etc/sysconfig/selinuxsed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
  1. 禁用 Swap
# 临时关闭 Swapswapoff -a# 永久禁用 Swapvi /etc/fstab在swap分区这行前加 # 注释掉#/dev/mapper/centos-swap swap
  1. 设置存储库
# 安装 yum-utils 包, 并设置稳定存储库yum install -y yum-utilsyum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  1. 安装配置 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# 启动 Dockersystemctl enable docker && systemctl start docker# 查看版本docker -v# 配置国内镜像源,修改/新建 daemon.jsonvi /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/"        ]}# 重启 Dockersystemctl restart docker
  1. 安装 Docker Compose
# 下载 Docker Composesudo 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>
  1. 修改 K8S 源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo[kubernetes]name=Kubernetesbaseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/enabled=1gpgcheck=1repo_gpgcheck=1gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpgEOF

基础环境搭建完成后,令当前虚拟机做 Master 主机,利用虚拟机平台,比如 VMWare、VirtualBox 等的克隆功能,克隆一台 Worker 主机(当然也可以克隆多台)。注意,克隆后的多台主机要保证 ip 不同,不同软件的操作不同,具体操作此处此处不做赘述。

  1. 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
  1. Worker 端安装 kubeadm、kubelet
# 安装yum install -y kubeadm kubelet# 启动 kubelet 服务systemctl enable kubelet && systemctl start kubelet
  1. 启动容器运行时 containerd
# Master 端和 Worker 端都要操作mv /etc/containerd/config.toml /etc/containerd/config.bakcontainerd config default | sudo tee /etc/containerd/config.tomlsystemctl restart containerd
  1. 配置主机名,需要同时在 Master 和 Worker 上操作
    • Master 节点下:
    # 编辑 hosts,添加各个节点的映射vi /etc/hosts# 我的 Master 主机 ip 为 192.168.65.130,Worker 主机 ip 为 192.168.65.132192.168.65.132 k8s-node1192.168.65.130 k8s-master# Master 节点hostnamectl --static set-hostname k8s-master# 立刻生效hostname $hostname
    • Worker 节点下:
    vi /etc/hosts192.168.65.132 k8s-node1192.168.65.130 k8s-master# Worker 节点hostnamectl --static set-hostname k8s-node1# 立刻生效hostname $hostname
  2. 初始化 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

初始化完成后结果如下:
在这里插入图片描述
将这里提示的 kubeadm join xxx 命令保存下来,如果忘记了也可以通过下面命令查看:

kubeadm token create --print-join-command

继续执行:

mkdir -p ~/.kubesudo cp -i /etc/kubernetes/admin.conf ~/.kube/configsudo chown $(id -u):$(id -g) ~/.kube/config
  1. 将 Worker 加入到 Master 节点
# Worker 端,使用上一步得到的 join 命令kubeadm join 192.168.65.130:6443 --token 4olf44.2t6sqev73d6ewm48 --discovery-token-ca-cert-hash sha256:3603cf3bd9efa671e95a93f922f097580b1ffbfe3e55ca8b7f1876bf8fc4be69

成功后的提示如下:
在这里插入图片描述
这一步可能报错:

[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
  1. Master 端安装 Calico 网络插件
    注意,Calico 的版本需要与 kubelet 匹配,适配关系在 Calico 每个版本的说明都有,比如我的 kubelet 是 1.21.3,满足此版本的 Calico 有 3.20、3.21:
    在这里插入图片描述
    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

在这里插入图片描述
9. 查看节点、pod 状态

# 查看 nodeskubelet get node# 查看 podskubectl get pods -n kube-system -o wide

一开始节点处于 NotReady 状态:
在这里插入图片描述
相关的 coredns 等也在启动中:
在这里插入图片描述
经过一段时间后,可以看到,所有 pods 均已启动(running),节点已就绪(Ready):
在这里插入图片描述

  1. 所有 worker 节点删除工作目录,并重置 kubeadm
rm -rf /etc/kubernetes/*kubeadm reset
  1. master 节点删除工作目录,并重置kubeadm
rm -rf /etc/kubernetes/*rm -rf ~/.kube/*rm -rf /var/lib/etcd/*kubeadm reset -f
  1. 同上一节的操作,从初始化 master 节点开始

来源地址:https://blog.csdn.net/by6671715/article/details/131732459

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯