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

这篇具有很好参考价值的文章主要介绍了K8s 入门指南(一):单节点集群环境搭建。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

官方文档:Kubernetes 文档 | Kubernetes

系统配置 CentOS 7.9(2 核 2 G)

本文为 k8s 入门指南专栏,将会使用 kubeadm 搭建单节点 k8s 集群,详细讲解环境搭建部署的细节,专栏后面章节会以实战代码介绍相关概念,带您快速入门 k8s

K8s 入门指南(一):单节点集群环境搭建,k8s,k8s,kubernetes,容器,容器编排,集群搭建

搭建方式

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

安装脚本如下

#!/bin/bash

set -e
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl start docker
sudo systemctl enable docker
sudo docker run hello-world

配置如下

cat > /etc/docker/daemon.json << EOF
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF

sudo systemctl enable docker
sudo systemctl daemon-reload
sudo systemctl restart docker

如果在国内,可以配置镜像加速

阿里云镜像加速地址:容器镜像服务镜像构建镜像授权_镜像托管-阿里云 (aliyun.com)

K8s 入门指南(一):单节点集群环境搭建,k8s,k8s,kubernetes,容器,容器编排,集群搭建

然后复制上面地址

# 更换镜像为阿里云
vim /etc/docker/daemon.json
# 添加如下内容
{
  "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
}

systemctl restart docker
docker info

禁用 SELinux

将 SELinux 设置为  permissive  模式

# 将 SELinux 设置为 permissive 模式(相当于将其禁用)
sudo setenforce 0
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 添加下面一行:

vm.swappiness=0

执行 sysctl -p /etc/sysctl.d/k8s.conf 使修改生效

关闭防火墙

如果各个主机启用了防火墙,需要开放 Kubernetes 各个组件所需要的端口

sudo systemctl stop firewalld
sudo systemctl disable firewalld

查看是否安装成功

kubeadm version
kubectl version --client
kubelet --version

其他

设置允许 iptables 检查桥接流量

cat > /etc/modules-load.d/k8s.conf << EOF
br_netfilter
EOF

cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

sudo sysctl --system

安装相关插件

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(国内线路)

cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
yum install -y kubelet-1.20.2 kubeadm-1.20.2 kubectl-1.20.2 --disableexcludes=kubernetes
systemctl enable --now kubelet

安装 kubectl

curl -Lo kubectl "https://storage.googleapis.com/kubernetes-release/release/v1.20.2/bin/linux/amd64/kubectl"
chmod +x kubectl && sudo mv kubectl /usr/local/bin/

拉取镜像

执行 kubeadm config images pull 拉取镜像,但是很大可能因为网络原因连接失败,可以使用如下阿里云命令(版本 v1.21)

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.21.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.21.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.21.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.21.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.13-0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2
docker pull coredns/coredns:1.7.0

在 k8s 安装时会默认在镜像中获取 k8s.gcr.io 前缀的镜像,所以我们需要将上文下载好的镜像更改名称

docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.21.1 k8s.gcr.io/kube-apiserver:v1.21.1
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.21.1 k8s.gcr.io/kube-proxy:v1.21.1
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.21.1 k8s.gcr.io/kube-controller-manager:v1.21.1
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.21.1 k8s.gcr.io/kube-scheduler:v1.21.1
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.13-0 k8s.gcr.io/etcd:3.4.13-0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2 k8s.gcr.io/pause:3.2
docker tag coredns/coredns:1.7.0 k8s.gcr.io/coredns:1.7.0

注:后面 kubeadm init初始集群的时候可能报错,显示镜像版本不对应,自行更改上面的版本即可,重新 docker pulldocker tag 即可,群体替换版本即可(1.21.1 -> 1.20.15),我这里就是偶尔需要用 1.21.1 版本,偶尔需要用 1.20.15 版本,所以我索性给这两个版本镜像都拉取到本地

修改主机映射

vim /etc/hosts

K8s 入门指南(一):单节点集群环境搭建,k8s,k8s,kubernetes,容器,容器编排,集群搭建

初始化服务

在初始化集群之前需要先重启下 kubelet systemctl restart kubelet

kubeadm init --apiserver-advertise-address=172.25.234.148 --pod-network-cidr=10.244.0.0/16 --kubernetes-version=v1.21.1
# 或
kubeadm init

解释下命令

  1. kubeadm init: 这是命令的主体部分,它告诉 kubeadm 初始化一个新的 Kubernetes 控制平面。
  2. --apiserver-advertise-address=192.168.44.15: 这个选项指定 Kubernetes API Server 监听的网络地址。在这里,它设置为 192.168.44.15
  3. --pod-network-cidr=10.244.0.0/16: 这个选项指定用于 Pod 网络的 CIDR 地址范围。这是容器之间通信的地址范围。在这里,它设置为 10.244.0.0/16
  4. --kubernetes-version=v1.21.1: 这个选项指定要安装的 Kubernetes 版本,这里设置为 v1.21.1

如果出现问题,需要自行查看日志然后搜索解决(因为可能的出现错误太多,这里没法一一列出)

K8s 入门指南(一):单节点集群环境搭建,k8s,k8s,kubernetes,容器,容器编排,集群搭建

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

K8s 入门指南(一):单节点集群环境搭建,k8s,k8s,kubernetes,容器,容器编排,集群搭建

注意:这里我使用的是 kubeadm init 初始化集群

下面解释成功日志输出,要使非 root 用户可以运行 kubectl,请运行以下命令,它们也是 kubeadm init 输出的一部分

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

如果是 root 用户,可以运行如下

export KUBECONFIG=/etc/kubernetes/admin.conf

我们可以运行 kubectl apply -f [podnetwork].yaml 部署 Pod 网络

然后如果多集群部署,并且多服务器之间内网是连通的话,可以使用如下命令添加工作节点

kubeadm join 172.25.234.148:6443 --token ls55pz.ed4wq51xex0ho1hh \
    --discovery-token-ca-cert-hash sha256:a082bb7e27b8c26625edeb8198e49967bd4dd4493b3b532c750a9f98f912f801

然后我们可以安装 Flannel,Flannel 通过给每台宿主机分配一个子网的方式为容器提供虚拟网络,它基于 Linux TUN/TAP,使用 UDP 封装 IP 包来创建 overlay 网络,并借助 etcd 维护网络的分配情况

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

最后验证节点,如果为 Ready 则 master 节点已经注册到了 k8s

kubectl get nodes

如果是 NotReady,可以执行以下语句判断服务器状态

K8s 入门指南(一):单节点集群环境搭建,k8s,k8s,kubernetes,容器,容器编排,集群搭建

kubectl get nodes -o yaml

然后查看 kubelet 日志 journalctl -f -u kubelet.service

部分日志显示错误:networkPlugin cni failed to set up pod

vim /etc/yum.repos.d/kubernetes.repo

gpgcheck=0
repo_gpgcheck=0
# 上面两项修改如下
gpgcheck=1
repo_gpgcheck=1

# 然后执行如下
yum clean all
yum install kubernetes-cni -y

最后可以看到节点添加成功

K8s 入门指南(一):单节点集群环境搭建,k8s,k8s,kubernetes,容器,容器编排,集群搭建

总结

至此单节点环境部署已经结束,博主刚刚接触学习 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 发布!文章来源地址https://www.toymoban.com/news/detail-751532.html

到了这里,关于K8s 入门指南(一):单节点集群环境搭建的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • k8s集群删除master节点

    1.在另外的master节点执行以下命令 kubectl get node      #查看需要删除的节点名称 kubectl delete node k8s-master01  #删除名为k8s-master01的节点 2.在k8s-master01清空集群配置信息 kubeadm reset  --cri-socket=unix:///var/run/cri-dockerd.sock  #因为我使用的是1.26.0版本的k8s所以需要指定cri rm -rf /var/lib/

    2024年02月13日
    浏览(37)
  • k8s其他master节点加入集群命令

      kubeadm join 192.168.0.236:16443 --token 7t2weq.bjbawausm0jaxury         --discovery-token-ca-cert-hash sha256:92175a356db070deb2ddd3823e288e3005a4baeec9b68580dcc11ce4d3767195         --control-plane --certificate-key a01487c705d04e23832dafee30b06e9ef2ed9d946e9c5c1e869d915da043b640

    2024年01月18日
    浏览(40)
  • k8s集群部署 | 三节点(复用)高可用集群过程参考

    1.1.1 实验架构图 1.1.2 系统版本说明 OS 版本:CentOS Linux release 7.9.2009 (Core) 初始内核版本:3.10.0-1160.71.1.el7.x86_64 配置信息:2C2G 150G硬盘 文件系统:xfs 网络:外网权限 k8s 版本:1.25.9 1.1.3 环境基本信息 K8s集群角色 IP地址 主机名 组件信息 控制节点1(工作节点1) 192.168.204.10 k8

    2024年02月04日
    浏览(43)
  • 设置k8s中节点node的ROLES值,K8S集群怎么修改node1的集群ROLES

    其实这个Roles就是一个标签,执行以下命令给node1 和 node2 打上worker标签 k8s-node1 打上标签为worker1 k8s-node2 打上标签为worker2

    2024年02月02日
    浏览(40)
  • K8S集群node节点状态为notready

    Kubernetes集群中的node节点状态显示为notready,这通常意味着该节点上的一个或多个组件出现了故障。在这种情况下,您需要进一步检查该节点的状态以确定问题的原因。您可以使用kubectl命令检查node的详细信息,例如: 此命令将显示该节点的状态,以及可能导致notready状态的任

    2024年02月15日
    浏览(38)
  • k8s集群—node节点的删除与添加

    在搭建集群过程中,有时候会遇到一个节点处于ready状态,另一个节点处于notready状态,需要把node节点从集群中删除后再次加入。 如果需要在k8s集群中删除节点,首先需要在master节点上删除该节点的相关数据,再删除该节点,接着在该节点上进行reset操作,接着删除相关文件

    2024年02月17日
    浏览(48)
  • k8s集群加入一个新的node节点

    实验目的:在已有的k8s集群中加入一个新的node节点,并正常工作。 已有的k8s集群节点信息:centos7.9 kubeadm 安装kubernetes集群 192.168.206.130 master 192.168.206.131 k8s-node1 192.168.206.136 k8s-node2 新加入一个节点: 192.168.206.138 k8s-node3 kubectl get nodes  kubectl get nodes -o wide  在进行下面的步骤之

    2024年02月16日
    浏览(44)
  • k8s集群node节点运行kubectl命令

            在容器化项目部署中,某些应用需要部署到指定的机器上(涉及机器信息收集,然后生成license,机器授权等),所以需要在k8s集群的node节点上,手动执行kubectl命令。         具体的操作步骤如下: (1)在node节点执行任意kubectl命令,例如:kubectl get nodes,可以看到

    2024年02月14日
    浏览(41)
  • 外部节点访问 k8s 集群内的 starrocks

    用kubeadm在虚拟机搭建了k8s,按starrocks官网步骤,用k8s部署了starrocks 部署成功: 在 k8s集群内节点访问到 sr:(通过 clusterIP )  k8s 节点内访问成功: ​​​​​​​  尝试在集群外访问sr:  修改完成后查看端口 集群外部的客户端访问不了,错误是 BE 节点 not found 本地无法

    2024年02月13日
    浏览(36)
  • k8s node节点加入集群,token过期

    1、master01节点执行  kubeadm token create --print-join-command 2、执行命令 kubeadm join 192.168.0.236:16443 --token qucd8q.hsfq4a1afluzaky3 --discovery-token-ca-cert-hash sha256:92175a356db070deb2ddd3823e288e3005a4baeec9b68580dcc11ce4d3767195 3、查看node02节点是否加入集群

    2024年01月18日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包