K8s 入门指南(一):单节点集群环境搭建

打印 上一主题 下一主题

主题 571|帖子 571|积分 1713

媒介

官方文档:Kubernetes 文档 | Kubernetes
   系统配置 CentOS 7.9(2 核 2 G)
  本文为 k8s 入门指南专栏,将会使用 kubeadm 搭建单节点 k8s 集群,详细讲解环境搭建部署的细节,专栏背面章节会以实战代码介绍相关概念,带您快速入门 k8s

搭建方式

k8s 集群搭建有三种方式,现在主流的搭建 k8s 集群的方式有 kubeadm、minikube,二进制包
kubeadm



  • 是一个工具,用于快速搭建 kubernetes 集群,现在应该是比力方便和推荐的,简单易用
  • kubeadm 是 Kubernetes 1.4 开始新增的特性
  • kubeadm init 以及 kubeadm join 这两个下令可以快速创建 kubernetes 集群
minikube



  • 一般用于本地开辟、测试和学习,不能用于生产环境
  • 是一个工具,minikube 快速搭建一个运行在本地的单节点的 Kubernetes
二进制包



  • 在官网下载相关的组件的二进制包,上面的两个是工具,可以快速搭建集群,也就是相当于用步调脚本帮我们装好了集群,前两者属于自动部署,简化部署操作,自动部署屏蔽了很多细节,使得对各个模块感知很少,遇到题目很难排查,如果手动安装,对 kubernetes 明白也会更全面。
  • 现在生产环境的主流搭建方式,已在生产环境验证,kubeadm 也可以搭建生产环境,不过 kubeadm 应该还没有被大规模在生产环境验证
本次我们作为演示的是 kubeadm
环境准备

官方文档:安装 kubeadm | Kubernetes
   注:如果是使用的云服务器,下面的 swap、selinux 和防火墙都是默认关闭的,无需进行对应操作
  安装 Docker

官方文档:Install Docker Engine on CentOS | Docker Docs
安装脚本如下
  1. #!/bin/bash
  2. set -e
  3. sudo yum install -y yum-utils
  4. sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  5. sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  6. sudo systemctl start docker
  7. sudo systemctl enable docker
  8. sudo docker run hello-world
复制代码
配置如下
  1. cat > /etc/docker/daemon.json << EOF
  2. {
  3.   "exec-opts": ["native.cgroupdriver=systemd"],
  4.   "log-driver": "json-file",
  5.   "log-opts": {
  6.     "max-size": "100m"
  7.   },
  8.   "storage-driver": "overlay2"
  9. }
  10. EOF
  11. sudo systemctl enable docker
  12. sudo systemctl daemon-reload
  13. sudo systemctl restart docker
复制代码
如果在国内,可以配置镜像加速
阿里云镜像加速地址:容器镜像服务镜像构建镜像授权_镜像托管-阿里云 (aliyun.com)

然后复制上面地址
  1. # 更换镜像为阿里云
  2. vim /etc/docker/daemon.json
  3. # 添加如下内容
  4. {
  5.   "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
  6. }
  7. systemctl restart docker
  8. docker info
复制代码
禁用 SELinux

将 SELinux 设置为  permissive  模式
  1. # 将 SELinux 设置为 permissive 模式(相当于将其禁用)
  2. sudo setenforce 0
  3. sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
复制代码
关闭 Swap

Kubernetes 1.8 开始要求关闭系统的 Swap。如果不关闭,默认配置下 kubelet 将无法启动。可以通过 kubelet 的启动参数--fail-swap-on=false更改这个限制。我们这里简单起见,直接关闭系统的 Swap
修改/etc/fstab文件,注释掉SWAP的自动挂载,使用free -m确认 swap 已经关闭。
swappiness参数调整,修改/etc/sysctl.d/k8s.conf 添加下面一行:
  1. vm.swappiness=0
复制代码
执行 sysctl -p /etc/sysctl.d/k8s.conf 使修改生效
关闭防火墙

如果各个主机启用了防火墙,需要开放 Kubernetes 各个组件所需要的端口
  1. sudo systemctl stop firewalld
  2. sudo systemctl disable firewalld
复制代码
检察是否安装成功
  1. kubeadm version
  2. kubectl version --client
  3. kubelet --version
复制代码
其他

设置允许 iptables 检查桥接流量
  1. cat > /etc/modules-load.d/k8s.conf << EOF
  2. br_netfilter
  3. EOF
  4. cat > /etc/sysctl.d/k8s.conf << EOF
  5. net.bridge.bridge-nf-call-ip6tables = 1
  6. net.bridge.bridge-nf-call-iptables = 1
  7. EOF
  8. sudo sysctl --system
复制代码
安装相关插件
  1. yum -y install socat conntrack-tools
复制代码
集群搭建

安装 kubeadm

官方文档:安装 kubeadm | Kubernetes
kubeadm:用来初始化集群的指令。
kubelet:在集群中的每个节点上用来启动 Pod 和容器等。
kubectl:用来与集群通讯的下令行工具。
kubeadm 不能帮你安装大概管理 kubelet 或 kubectl,所以你需要确保它们与通过 kubeadm 安装的控制平面的版本相匹配。如果不这样做,则存在发生版本毛病的风险,可能会导致一些预料之外的错误和题目。然而,控制平面与 kubelet 之间可以存在一个次要版本的毛病,但 kubelet 的版本不可以超过 API 服务器的版本。例如,1.7.0 版本的 kubelet 可以完全兼容 1.8.0 版本的 API 服务器,反之则不可以。
执行如下脚本安装 kubeadm(国内线路)
  1. cat > /etc/yum.repos.d/kubernetes.repo << EOF
  2. [kubernetes]
  3. name=Kubernetes
  4. baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
  5. enabled=1
  6. gpgcheck=0
  7. repo_gpgcheck=0
  8. gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
  9. EOF
  10. yum install -y kubelet-1.20.2 kubeadm-1.20.2 kubectl-1.20.2 --disableexcludes=kubernetes
  11. systemctl enable --now kubelet
复制代码
安装 kubectl
  1. curl -Lo kubectl "https://storage.googleapis.com/kubernetes-release/release/v1.20.2/bin/linux/amd64/kubectl"
  2. chmod +x kubectl && sudo mv kubectl /usr/local/bin/
复制代码
拉取镜像

执行 kubeadm config images pull 拉取镜像,但是很大可能由于网络原因毗连失败,可以使用如下阿里云下令(版本 v1.21)
  1. docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.21.1
  2. docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.21.1
  3. docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.21.1
  4. docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.21.1
  5. docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.13-0
  6. docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2
  7. docker pull coredns/coredns:1.7.0
复制代码
在 k8s 安装时会默认在镜像中获取 k8s.gcr.io 前缀的镜像,所以我们需要将上文下载好的镜像更改名称
  1. docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.21.1 k8s.gcr.io/kube-apiserver:v1.21.1
  2. docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.21.1 k8s.gcr.io/kube-proxy:v1.21.1
  3. docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.21.1 k8s.gcr.io/kube-controller-manager:v1.21.1
  4. docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.21.1 k8s.gcr.io/kube-scheduler:v1.21.1
  5. docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.13-0 k8s.gcr.io/etcd:3.4.13-0
  6. docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2 k8s.gcr.io/pause:3.2
  7. docker tag coredns/coredns:1.7.0 k8s.gcr.io/coredns:1.7.0
复制代码
  注:背面 kubeadm init初始集群的时候可能报错,显示镜像版本不对应,自行更改上面的版本即可,重新 docker pull 和 docker tag 即可,群体替换版本即可(1.21.1 -> 1.20.15),我这里就是偶然需要用 1.21.1 版本,偶然需要用 1.20.15 版本,所以我索性给这两个版本镜像都拉取到本地
  修改主机映射

  1. vim /etc/hosts
复制代码

初始化服务

在初始化集群之前需要先重启下 kubelet systemctl restart kubelet
  1. kubeadm init --apiserver-advertise-address=172.25.234.148 --pod-network-cidr=10.244.0.0/16 --kubernetes-version=v1.21.1
  2. # 或
  3. kubeadm init
复制代码
表明下下令

  • kubeadm init: 这是下令的主体部门,它告诉 kubeadm 初始化一个新的 Kubernetes 控制平面。
  • --apiserver-advertise-address=192.168.44.15: 这个选项指定 Kubernetes API Server 监听的网络地址。在这里,它设置为 192.168.44.15。
  • --pod-network-cidr=10.244.0.0/16: 这个选项指定用于 Pod 网络的 CIDR 地址范围。这是容器之间通讯的地址范围。在这里,它设置为 10.244.0.0/16。
  • --kubernetes-version=v1.21.1: 这个选项指定要安装的 Kubernetes 版本,这里设置为 v1.21.1。
如果出现题目,需要自行检察日志然后搜索解决(由于可能的出现错误太多,这里没法逐一列出)

可以实验重新启动 kubelet systemctl restart kubelet ,然后重置集群kubeadm reset,然后再次实验初始化

   留意:这里我使用的是 kubeadm init 初始化集群
  下面表明成功日志输出,要使非 root 用户可以运行 kubectl,请运行以下下令,它们也是 kubeadm init 输出的一部门
  1. mkdir -p $HOME/.kube
  2. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  3. sudo chown $(id -u):$(id -g) $HOME/.kube/config
复制代码
如果是 root 用户,可以运行如下
  1. export KUBECONFIG=/etc/kubernetes/admin.conf
复制代码
我们可以运行 kubectl apply -f [podnetwork].yaml 部署 Pod 网络
然后如果多集群部署,并且多服务器之间内网是连通的话,可以使用如下下令添加工作节点
  1. kubeadm join 172.25.234.148:6443 --token ls55pz.ed4wq51xex0ho1hh \
  2.     --discovery-token-ca-cert-hash sha256:a082bb7e27b8c26625edeb8198e49967bd4dd4493b3b532c750a9f98f912f801
复制代码
然后我们可以安装 Flannel,Flannel 通过给每台宿主机分配一个子网的方式为容器提供虚拟网络,它基于 Linux TUN/TAP,使用 UDP 封装 IP 包来创建 overlay 网络,并借助 etcd 维护网络的分配情况
  1. kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
复制代码
最后验证节点,如果为 Ready 则 master 节点已经注册到了 k8s
  1. kubectl get nodes
复制代码
如果是 NotReady,可以执行以下语句判断服务器状态

  1. kubectl get nodes
  2. -o yaml
复制代码
然后检察 kubelet 日志 journalctl -f -u kubelet.service
部门日志显示错误:networkPlugin cni failed to set up pod
  1. vim /etc/yum.repos.d/kubernetes.repo
  2. gpgcheck=0
  3. repo_gpgcheck=0
  4. # 上面两项修改如下
  5. gpgcheck=1
  6. repo_gpgcheck=1
  7. # 然后执行如下
  8. yum clean all
  9. yum install kubernetes-cni -y
复制代码
最后可以看到节点添加成功

总结

至此单节点环境部署已经结束,博主刚刚打仗学习 k8s,希望和各人分享学习中的经验教训,如果文中有错误马虎还望各位指出
背面专栏大概还会有一到两个章节,以实战 demo 代码学习 Pod,Deployment,Service 等概念
除此之外的话,我自己也实验过 windows(WSL2)搭建 minikube k8s 环境,不是很抱负,哪怕是对于学习目标也并不推荐。然后实在相较于 CentOS 实在官方更推荐使用 Ubuntu ,官方社区长期维护,也比力稳定
参考链接



  • 通过 kubeadm 搭建单节点 k8s 环境 | yanyx’s blog
  • 用 Kubeadm 搭建一个 k8s 1.7.5 的单节点集群
  • 使用 kubeadm 搭建 kubernetes 单机 master - 阿里云开辟者社区
  • guangzhengli/k8s-tutorials: k8s tutorials | k8s 教程
   本文由博客一文多发平台 OpenWrite 发布!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

傲渊山岳

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表