k8s--使用 kubeadm 搭建 k8s 1.25.2 版本

简介: k8s--使用 kubeadm 搭建 k8s 1.25.2 版本

前戏


ip 描述  
10.6.215.30 master1  
10.6.215.31 master2  
10.6.215.32 node1  
10.6.215.33 node2

给四台主机分别设置 hostname,后面会根据 hostname 来生成名称

# 每个节点分别设置对应主机名
hostnamectl set-hostname master1  # 在 10.6.215.30 上执行
hostnamectl set-hostname master2  # 在 10.6.215.31 上执行
hostnamectl set-hostname node1  # 在 10.6.215.32 上执行
hostnamectl set-hostname node2  # 在 10.6.215.33 上执行

所有节点都修改 hosts

# 所有节点都修改 hosts
vim /etc/hosts
10.6.215.30 master1
10.6.215.31 master2
10.6.215.32 node1
10.6.215.33 node2

或者使用追加方式

cat <<EOF >> /etc/hosts
10.6.215.30 master1
10.6.215.31 master2
10.6.215.32 node1
10.6.215.33 node2
EOF

修改完成之后,去 ping 一下,master1 ping node1/node2

以及 node1 ping master1/master2/node2,node2 ping master1/master2/node1,如果都可以 ping 成功,则 host 配置的没问题


Kubernetes 安装


下面命令在所有节点执行

下面命令在所有节点执行

下面命令在所有节点执行


关闭 swap

禁用交换分区。为了保证 kubelet 正常工作,你必须禁用交换分区。详情见 安装 kubeadm

# 所有节点执行
[root@master1 opt]# swapoff -a
[root@master1 opt]# sed -i 's/.*swap.*/#&/' /etc/fstab


关闭 SELinux

为了避免一些权限上的麻烦,我们直接关闭 SELinux,关闭 SELinux 实际上是不可取的,它相对不安全,不建议在生产环境这样做.

# 所有节点执行
[root@master1 opt]# setenforce 0
[root@master1 opt]# sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config


关闭 firewalld

kubernetes 的运行需要 linux 开放一些端口,详情见 检查所需端口 你可以精确的只打开所需的端口,这样更安全。我为了方便直接关闭了防火墙,实际上是不安全的,不建议在生产环境这样做.

# 所有节点执行
[root@master1 opt]# systemctl disable firewalld
[root@master1 opt]# systemctl stop firewalld


配置 Kubernetes


详情见 Install and configure prerequisites。我们需要提前配置好 kubernetes 的一些通用配置项

# 所有节点执行
[root@master1 opt]# cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

# 所有节点执行
[root@master1 opt]# modprobe overlay
[root@master1 opt]# modprobe br_netfilter
# 所有节点执行
[root@master1 opt]# cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF

让我们的配置生效

# 所有节点安装
[root@master1 opt]# sysctl --system


containerd 安装


Kubernates 中 pod 的运行必须有容器运行环境,以前 kubernetes 是使用 Docker,后面主要使用 containerd 等,目前支持的运行时可以参考 container-runtimes

本文使用 containerd,前面我们也讲过 Docker 也是基于 containerd 的,那么我们直接使用 Docker 的安装源,只安装 containerd 就行

移除可能安装过的 Docker 包

# 所有节点
[root@master1 opt]# sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
安装 yum-utils
# 所有节点执行
[root@master1 opt]# sudo yum install -y yum-utils

添加 docker 软件源

# 所有节点执行
[root@master1 opt]# sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo

安装 containerd
# 所有节点执行
sudo yum install containerd.io -y

设置 containerd 开机自启动

# 所有节点执行
[root@master1 opt]# systemctl enable containerd
[root@master1 opt]# systemctl start containerd

修改 containerd 使用 systemd

# 所有节点执行
[root@master1 opt]# containerd  config default > /etc/containerd/config.toml
[root@master1 opt]# sed -i 's#k8s.gcr.io#registry.aliyuncs.com/google_containers#g' /etc/containerd/config.toml
[root@master1 opt]# sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml

重启 containerd

# 所有节点执行
[root@master1 opt]# systemctl daemon-reload
[root@master1 opt]# systemctl enable --now containerd
[root@master1 opt]# systemctl restart  containerd


安装 Kubernetes 组件


配置软件源,这里使用 aliyun 的源,官方的源是 google 的,没法在国内访问

# 所有节点执行
[root@master1 opt]# 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

安装kubelet,kubeadm,kubectl

# 所有节点执行
[root@master1 opt]# yum install kubelet kubeadm kubectl --nogpgcheck -y

设置kubelet自启动

# 所有节点执行
[root@master1 opt]# systemctl enable kubelet

安装crictl

# 所有节点执行
[root@master1 opt]# VERSION="v1.23.0"
[root@master1 opt]# curl -L https://github.com/kubernetes-sigs/cri-tools/releases/download/$VERSION/crictl-${VERSION}-linux-amd64.tar.gz --output crictl-${VERSION}-linux-amd64.tar.gz

设置crictl

# 所有节点执行
[root@master1 opt]# crictl config --set runtime-endpoint=unix:///run/containerd/containerd.sock


初始化集群,只在 master 上执行


# 在担任 master 的 k8s 节点上执行,使用 kubeadm 初始化集群
# 这里 apiserver-advertise-address 的值是 master 的主机的 ip
[root@master1 opt]# kubeadm init  --apiserver-advertise-address=10.6.215.50 --image-repository registry.aliyuncs.com/google_containers


全部的 worker 节点上执行我红框内的部分,加入集群

# 只在 node 节点上执行
[root@node1 ~]# kubeadm join 10.6.215.50:6443 --token 1snv5t.ts4a8tlpa99xeeym \
--discovery-token-ca-cert-hash sha256:a24b8eeaa555ed1e4f9a92c6404a611a030cb581a1fb423c360afb38e24cd781


配置网络插件 calico


节点加入集群后,起初是NotReady的,这是正常的,我们配置好网络就行,在担任 master 节点上执行执行下面的命令,等待一段时间全部节点就会处于Ready状态

[root@master1 opt]# kubectl get nodes
NAME      STATUS     ROLES           AGE   VERSION
master1   NotReady   control-plane   47s   v1.25.2
node1     NotReady   <none>          19s   v1.25.2
node2     NotReady   <none>          2s    v1.25.2

安装 calico 插件

# 只在 master 上执行
[root@master1 opt]# kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

等待中,没有节点是Ready的,不要着急等一段时间就全部Ready

[root@master1 opt]# kubectl get node
NAME      STATUS   ROLES           AGE     VERSION
master1   Ready    control-plane   5m23s   v1.25.2
node1     Ready    <none>          4m55s   v1.25.2
node2     Ready    <none>          4m38s   v1.25.2

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
2月前
|
Kubernetes Linux 测试技术
|
2月前
|
Kubernetes Linux 开发工具
centos7通过kubeadm安装k8s 1.27.1版本
centos7通过kubeadm安装k8s 1.27.1版本
|
3月前
|
Kubernetes 网络虚拟化 Docker
K8S镜像下载报错解决方案(使用阿里云镜像去下载kubeadm需要的镜像文件)
文章提供了一个解决方案,用于在无法直接访问Google镜像仓库的情况下,通过使用阿里云镜像来下载kubeadm所需的Kubernetes镜像。
373 4
K8S镜像下载报错解决方案(使用阿里云镜像去下载kubeadm需要的镜像文件)
|
3月前
|
Kubernetes 负载均衡 前端开发
二进制部署Kubernetes 1.23.15版本高可用集群实战
使用二进制文件部署Kubernetes 1.23.15版本高可用集群的详细教程,涵盖了从环境准备到网络插件部署的完整流程。
124 2
二进制部署Kubernetes 1.23.15版本高可用集群实战
|
3月前
|
存储 Kubernetes Ubuntu
Ubuntu 22.04LTS版本二进制部署K8S 1.30+版本
这篇文章详细介绍了在Ubuntu 22.04 LTS系统上使用VMware Fusion虚拟化软件部署Kubernetes 1.30+版本的完整过程,包括环境准备、安装containerd、配置etcd、生成证书、部署高可用组件、启动Kubernetes核心组件以及网络插件的部署和故障排查。
200 4
|
3月前
|
Kubernetes Ubuntu 网络安全
Ubuntu基于kubeadm快速部署K8S实战
关于如何在Ubuntu系统上使用kubeadm工具快速部署Kubernetes集群的详细实战指南。
219 2
|
3月前
|
Kubernetes 负载均衡 应用服务中间件
kubeadm快速构建K8S1.28.1高可用集群
关于如何使用kubeadm快速构建Kubernetes 1.28.1高可用集群的详细教程。
164 2
|
3月前
|
Kubernetes Linux API
CentOS 7.6使用kubeadm部署k8s 1.17.2测试集群实战篇
该博客文章详细介绍了在CentOS 7.6操作系统上使用kubeadm工具部署kubernetes 1.17.2版本的测试集群的过程,包括主机环境准备、安装Docker、配置kubelet、初始化集群、添加节点、部署网络插件以及配置k8s node节点管理api server服务器。
146 0
CentOS 7.6使用kubeadm部署k8s 1.17.2测试集群实战篇
|
4月前
|
Kubernetes 安全 持续交付
在K8S中,二进制安装和Kubeadm安装有什么区别?
在K8S中,二进制安装和Kubeadm安装有什么区别?
|
6天前
|
存储 Kubernetes 关系型数据库
阿里云ACK备份中心,K8s集群业务应用数据的一站式灾备方案
本文源自2024云栖大会苏雅诗的演讲,探讨了K8s集群业务为何需要灾备及其重要性。文中强调了集群与业务高可用配置对稳定性的重要性,并指出人为误操作等风险,建议实施周期性和特定情况下的灾备措施。针对容器化业务,提出了灾备的新特性与需求,包括工作负载为核心、云资源信息的备份,以及有状态应用的数据保护。介绍了ACK推出的备份中心解决方案,支持命名空间、标签、资源类型等维度的备份,并具备存储卷数据保护功能,能够满足GitOps流程企业的特定需求。此外,还详细描述了备份中心的使用流程、控制台展示、灾备难点及解决方案等内容,展示了备份中心如何有效应对K8s集群资源和存储卷数据的灾备挑战。