1 使用kubeadm部署Kubernetes

如无特殊说明,以下操作可以在所有节点上进行。

1.1 首先我们需要配置一下阿里源

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

1.2 开始安装

执行以下命令开始安装,可以默认安装也可以指定版本安装,目前的最新版本是1.24.1,默认即安装此版本。

yum install -y kubelet-1.24.1 kubeadm-1.24.1 kubectl-1.24.1 --disableexcludes=kubernetes

yum install kubelet kubeadm kubectl

1.3 安装后查看版本

kubeadm version

1.4 设置kubelet开机启动

systemctl enable --now kubelet

1.5 初始化kubeadm配置信息

kubeadm config print init-defaults >kubeadm-init.yaml

如上图所示,可以看出image仓库位置在k8s.gcr.io,为了防止拉取报错,可以配置成阿里云地址,定制出的config内容主要做了如下修改:

  • imageRepository为阿里云的registry
  • 设置kubelet的cgroupDriver为systemd
  • 设置kube-proxy代理模式为ipvs
apiVersion: kubeadm.k8s.io/v1beta3
mode: ipvs # kube-proxy 模式
bootstrapTokens:
- groups:
- system:bootstrappers:kubeadm:default-node-token
token: abcdef.0123456789abcdef
ttl: 24h0m0s
usages:
- signing
- authentication
kind: InitConfiguration
cgroupDriver: systemd # 配置 cgroup driver
localAPIEndpoint:
advertiseAddress: 192.168.183.133 # ip地址
bindPort: 6443
nodeRegistration:
criSocket: unix:///var/run/containerd/containerd.sock
imagePullPolicy: IfNotPresent
name: nodea
taints: null
---
apiServer:
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:
local:
dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers # 阿里源
kind: ClusterConfiguration
kubernetesVersion: 1.24.1
networking:
dnsDomain: cluster.local
serviceSubnet: 10.1.0.0/12
podSubnet: 10.88.0.0/16 # ip网段
scheduler: {}

详细的配置说明可以参考该文档:https://kubernetes.io/docs/reference/config-api/kubeadm-config.v1beta3/

1.6 拉取依赖镜像

在开始初始化集群之前,可以预先在各个服务器节点上拉取所k8s需要的如下容器镜像:

  • kube-apiserver:v1.24.0
  • kube-controller-manager:v1.24.0
  • kube-scheduler:v1.24.0
  • kube-proxy:v1.24.0
  • pause:3.7
  • etcd:3.5.3-0
  • coredns:v1.8.6
kubeadm config images pull --config kubeadm-init.yaml

2 Master节点操作

2.1 集群初始化

kubeadm init --config kubeadm-init.yaml

初始化过程中,可能会遇到“/proc/sys/net/bridge/bridge-nf-call-iptables does not exist”的错误,这是因为之前配置的br_netfilter没有启动,运行一下这个命令即可

modprobe br_netfilter

如果一切正常,则会遇到如下提示,

以及最重要的token

2.2 配置常规用户使用kubectl访问集群

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

2.3 保存配置文件

kubectl -n kube-system get cm kubeadm-config -o yaml

2.4 查看节点状态

kubectl get node

3 Node节点操作

3.1 加入集群

kubeadm join 192.168.183.133:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:9ec147b59acdd7ac4f6d3b7b5bf378cf46535aa77117878d49e926a638eaf307

出现如下信息,则说明Node节点已经成功加入到集群

执行如下命令,发现网络报错

kubectl get nodes

出现如上错误,我是把master节点上的admin.conf同步到两个node节点里,不知道大家是如何解决这个问题的。

在master节点做如下操作

scp /etc/kubernetes/admin.conf node02:/etc/kubernetes/
scp /etc/kubernetes/admin.conf node02:/etc/kubernetes/
```bash
![](https://img2022.cnblogs.com/blog/533598/202206/533598-20220616211924626-864940578.png) 在两个节点上同时执行如下命令:
```bash
mkdir -p $HOME/.kube
cp /etc/kubernetes/admin.conf ~/.kube/config

3.2 安装网络插件

我们有两种选择,一个是Flannel,另一个是Calico

由CoreOS开发的项目Flannel,可能是最直接和最受欢迎的CNI插件。它是容器编排系统中最成熟的网络结构示例之一,旨在实现更好的容器间和主机间网络。许多常见的Kubernetes集群部署工具和许多Kubernetes发行版都可以默认安装Flannel。

Calico是Kubernetes生态系统中另一种流行的网络选择。虽然Flannel被公认为是最简单的选择,但Calico以其性能、灵活性而闻名。Calico的功能更为全面,不仅提供主机和pod之间的网络连接,还涉及网络安全和管理。Calico CNI插件在CNI框架内封装了Calico的功能。

此处我们使用Flannel插件。

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

下载后需要修改里面的配置,首先设置一下网卡

其次需要设置一下网段,这里的网段和 1.5 步骤中的podSubnet的值保持一直,都是
10.88.0.0/16

执行命令

kubectl apply -f kube-flannel.yml

做出了如上操作之后还不行,还是会报错,主要是CNI版本兼容性问题,如图

这里可以把containerd中的CNI去除掉

mv /etc/cni/net.d/10-containerd-net.conflist /etc/cni/net.d/10-containerd-net.conflist.bak
systemctl daemon-reload
systemctl restart containerd kubelet

3.3 集群验证

kubectl get cs
kubectl get nodes

再执行一下如下命令,查看是否所有的pod都是运行正常的:

kubectl get pod --all-namespaces -o wide

3.4 验证DNS解析

  • 创建busybox.yaml
apiVersion: v1
kind: Pod
metadata:
name: busybox
namespace: default
spec:
containers:
- name: busybox
image: busybox
command:
- sleep
- "3600"
imagePullPolicy: IfNotPresent
restartPolicy: Always
kubectl create -f busybox.yaml

  • 验证一下状态
kubectl get pods busybox

  • DNS检查
kubectl exec -i -t busybox -- nslookup kubernetes.default

经过一系列排错后,再次执行如下命令:

kubectl exec -i -t busybox -- nslookup kubernetes.default

目前的操作只是练手而已,想要搭建高可用的集群任重道远,需要投入更多精力。

参考链接

http://www.manongjc.com/detail/25-lioggelnywerjyf.html

https://www.kubernetes.org.cn/1904.html

https://www.toutiao.com/article/7105957860210819623/

https://i4t.com/5451.html

https://blog.frognew.com/2022/05/kubeadm-install-kubernetes-1.24.html

基于Kubernetes v1.24.0的集群搭建(三)的更多相关文章

  1. 基于Kubernetes v1.24.0的集群搭建(二)

    上一篇文章主要是介绍了,每台虚拟机的环境配置.接下来我们开始有关K8S的相关部署. 另外补充一下上一篇文章中的K8S的change​log链接: https://github.com/kubernet ...

  2. 基于Kubernetes v1.24.0的集群搭建(一)

    一.写在前面 K8S 1.24作为一个很重要的版本更新,它为我们提供了很多重要功能.该版本涉及46项增强功能:其中14项已升级为稳定版,15项进入beta阶段,13项则刚刚进入alpha阶段.此外,另 ...

  3. Redis 5.0.5集群搭建

    Redis 5.0.5集群搭建 一.概述 Redis3.0版本之后支持Cluster. 1.1.redis cluster的现状 目前redis支持的cluster特性: 1):节点自动发现 2):s ...

  4. ActiveMQ此例简单介绍基于docker的activemq安装与集群搭建

    ActiveMQ拓展连接 此例简单介绍基于Docker的activemq安装与集群搭建 一 :安装 1.获取activemq镜像 docker pull webcenter/activemq 2.启动 ...

  5. windows+mysql集群搭建-三分钟搞定集群

    注:本文来源:  陈晓婵   <  windows+mysql集群搭建-三分钟搞定集群   > 一:mysql集群搭建教程-基础篇 计算机一级考试系统要用集群,目标是把集群搭建起来,保证一 ...

  6. Kubeadm搭建高可用(k8s)Kubernetes v1.24.0集群

    文章转载自:https://i4t.com/5451.html 背景 Kubernetes 1.24新特性 从kubelet中移除dockershim,自1.20版本被弃用之后,dockershim组 ...

  7. ubuntu18.04 基于Hadoop3.1.2集群的Hbase2.0.6集群搭建

    前置条件: 之前已经搭好了带有HDFS, MapReduce,Yarn 的 Hadoop 集群 链接: ubuntu18.04.2 hadoop3.1.2+zookeeper3.5.5高可用完全分布式 ...

  8. Redis 3.0.2集群搭建以及相关问题汇总

    Redis3 正式支持了 cluster,是为了解决构建redis集群时的诸多不便 (1)像操作单个redis一样操作key,不用操心key在哪个节点上(2)在线动态添加.删除redis节点,不用停止 ...

  9. Hadoop2.0 HA集群搭建步骤

    上一次搭建的Hadoop是一个伪分布式的,这次我们做一个用于个人的Hadoop集群(希望对大家搭建集群有所帮助): 集群节点分配: Park01 Zookeeper NameNode (active) ...

随机推荐

  1. ssm整合-ssmbuild

    目录 项目结构 导入相关的pom依赖 Maven资源过滤设置 建立基本结构和配置框架 Mybatis层编写 Spring层 Spring整合service层 SpringMVC层 Controller ...

  2. LinkedList实现

    LinkedList源码实现: public class LinkedList<E> { private class Node{ public E e; public Node next; ...

  3. Problem N: 输出回字形

    这个题如果用for循环直接做的话恐怕得做上几个小时吧,加上一点小技巧,用坐标法来写这个题.就像下面这样: 坐标原点不在矩形的角上,而在矩形的中心处,这只是算是一个技巧,理解起来好理解而已.

  4. 几种比较经典的波形及其FFT变换(正弦波,三角波,方波和锯齿波)

    之前上学时我的信号学得最差了,主要原因还是我高数学得不怎么样.可能是人总敬畏自己最不会的,所以我觉得我学过诸多科目中,数学是最博大精深而最妙的,从最开始的一次函数到反比例函数,二次三次函数和双曲线,椭 ...

  5. 基于 Apache Hudi 构建增量和无限回放事件流的 OLAP 平台

    1. 摘要 在本博客中,我们将讨论在构建流数据平台时如何利用 Hudi 的两个最令人难以置信的能力. 增量消费--每 30 分钟处理一次数据,并在我们的组织内构建每小时级别的OLAP平台 事件流的无限 ...

  6. 软件工程web课程第一次实验作业

    开头总结 本次作业使用html+css+js实现了一个简单页面 最终我要记录的是使用js完成了轮播图中图片背景的转换 <script> window.onload = function ( ...

  7. PyTorch环境配置

    PyTorch环境配置 本文档用于记录PyTorch环境配置过程中的要点. PyTorch环境配置 安装Miniconda 安装PyTorch 配置远程开发工具 基于CUDA的张量 导入警告问题 参考 ...

  8. python学习-Day24

    目录 今日内容详细 主菜 : ATM+购物车作业 项目开发流程 需求分析 架构设计 分组开发 项目测试 交付上线 需求分析 提炼项目功能 项目大致技术栈 架构设计 编程历经过程 三层架构 将ATM分为 ...

  9. netty系列之:netty中的核心解码器json

    目录 简介 java中对json的支持 netty对json的解码 总结 简介 程序和程序之间的数据传输方式有很多,可以通过二进制协议来传输,比较流行的像是thrift协议或者google的proto ...

  10. Vue图片浏览组件v-viewer使用

    简单介绍v-viewer的两种使用方法: Demo 安装依赖: npm install v-viewer --save 全局引入 import Viewer from 'v-viewer' impor ...