k8s集群搭建【1个master_1个node】 亲测成功!

2023-11-18

k8s集群搭建

k8s_1个master_1个node_集群搭建

步骤小结

1:安装docker
2:安装kubeadm/kubectl/kubelet
3:创建master节点的集群(并安装网络插件calico)
4:添加node节点到集群
5:创建pod验证集群可用性
6:卸载当前版本k8s
7:重启master
8:重启node1

下面对于master、Node节点同时进行

1.安装docker

sudo yum update
yum install -y docker-ce #安装免费版
vim /etc/docker/daemon.json #修改docker的cgroup驱动为systemd,否则kubeadm --init的时候会报错
# 添加这段json配置:  
{"exec-opts": ["native.cgroupdriver=systemd"]}

systemctl daemon-reload   # 重载配置
systemctl restart docker #启动docker服务
systemctl enable docker.service
docker run hello-world #会自动去拉取镜像,成功运行表示docker服务启动成功

2.安装k8s

#设置主机名字,不管是master还是node节点,都需要这样设置一下,不然kubeadmin join的时候会使用默认名字,而导致冲突,进而添加失败,名字随便,只需要唯一即可
#master节点上`hostnamectl set-hostname master`
hostnamectl set-hostname master
#node节点上`执行hostnamectl set-hostname node1`
hostnamectl set-hostname node1
#修改ip映射,不然安装时无法解析hostname(两个节点上都改就行)
vim /etc/host
10.255.0.67 master
10.255.0.69 node1

#关防火墙
systemctl stop firewalld
systemctl disable firewalld
setenforce 0

#对file中每行匹配到的第一个字符串进行替换格式为:sed -i 's/原字符串/新字符串/'file
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

#配置网络,便于各pod的通信
vim /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
#刷新配置
sysctl -p /etc/sysctl.d/k8s.conf

#关交换内存
swapoff -a
sed -i 's/.*swap.*/#&/' /etc/fstab

#配置镜像源,直接装kubectl会报错找不到
vim /etc/yum.repos.d/kubernetes.repo #输入下面缩进的内容
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
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
# 刷新包管理器
yum update

#查看kubelet有哪些版本
yum --showduplicates list kubelet

#安装
yum -y install kubeadm-1.22.0 kubectl-1.22.0 kubelet-1.22.0 #此处安装指定版本-1.22.0
#yum install -y kubelet kubeadm kubectl #此处安装最新版本

下面只对于master节点进行

3.创建集群

#启动kubelet服务并查看状态,此时kubelet服务的状态应该为auto-restart,也可能为dead,init后再次手动启动即可,因为需要kubeadm --init成功,kubelet服务才能启动
systemctl start kubelet & systemctl status kubelet
#设置kubelet开机启动
systemctl enable kubelet.service

#apiserver-advertise-address表示master ip
#文档地址https://kubernetes.io/zh-cn/docs/reference/setup-tools/kubeadm/kubeadm-init/
#初始化集群,初始化成功时记得保存它自动输出的:kubeadm join xx token xxxx,后续添加节点的时候会用到
kubeadm init --apiserver-advertise-address=10.255.xx.xx --image-repository registry.aliyuncs.com/google_containers
#成功初始化后显示:
------------------------------------------------------------------------------------------------------------------------
Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

Alternatively, if you are the root user, you can run:
  export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 10.255.xx.xx:6443 --token 3nbxco.tvtwkyxxxxxxxxxx \
        --discovery-token-ca-cert-hash sha256:8f142ba308e9bda7cab26e86ba44b1a7ca98654ab6c9xxxxxxxxxxxxxxxxxxxx 
------------------------------------------------------------------------------------------------------------------------

#--v=6 #类似于verbose; 查看集群初始化状态
systemctl start kubelet & systemctl status kubelet

#若执行上面那条命令报:[ERROR CRI]: container runtime is not running的错,则按如下操作把disabled_plugins = ["cri"] 这一行改成disabled_plugins = [],然后重启服务,然后再次执行init
#没有报错不用执行
sudo vim cat /etc/containerd/config.toml #修改配置文件
systemctl restart containerd #重启容器服务

#如果因为已经安装过一次,此时再次kubeadm --init会报错,需要执行kubeadm reset命令来重置,然后再执行init
#如果一直卡在[kubelet-check] Initial timeout of 40s passed.
#查看kubelet日志,总之就是看--init时apiserver的ip有没有搞错、docerk服务是否执行了systemctl enable docker.service
journalctl -u kubelet # 查看日志

#此时运行kubectl get nodes会报错,需要在master上先执行下列命令,此处操作是kubeadm --init成功后会提示你要把KUBECONFIG导出,然后source一下
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile
chown $(id -u):$(id -g) $HOME/.kube/config

#查看节点状态,此时状态为notReady需要安装网络
kubectl get nodes

#安装calico(网络插件)
wget https://docs.projectcalico.org/manifests/calico.yaml --no-check-certificate
#不行换成这个 wget https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml
#再不行手动下载传上去
kubectl apply -f calico.yaml
kubectl get pods -n kube-system #查看calico是否运行
kubectl get nodes #如果apply之后立即查可能会显示NotReady,过一会再查就是ready了

下面操作只在Node节点上进行

4.添加节点

#1:安装docker,同步骤1,略
#2:安装k8s,同步骤2
#3:启动Kubelet
systemctl start kubelet &systemctl status kubelet
#4:node1主动申请添加到集群中,10.255.xx.xx为master的IP,下面这条语句就是master机器在执行kubeadm --init时所打印的,此处复制粘贴即可,把当前节点加入到master节点的集群。
kubeadm join 10.255.xx.xx:6443 --token 3nbxco.tvtwkyxxxxxxxxxx \
        --discovery-token-ca-cert-hash sha256:8f142ba308e9bda7cab26e86ba44b1a7ca98654ab6c94xxxxxxxxxxxxxxxxxxxx 
        
#下面的操作是在master上。查看所有节点信息,马上查看可能会显示NotReady,需要等一会才会显示为Ready
kubectl get nodes

#显示下面的结果,即集群搭建成功
[root@master ~]# kubectl get nodes
NAME     STATUS   ROLES                  AGE     VERSION
master   Ready    control-plane,master   34m     v1.22.0
node1    Ready    <none>                 2m46s   v1.22.0

5.创建一个 nginx pod来验证集群是否能正常工作,在master上执行

# 创建pod 
kubectl create -f https://k8s.io/examples/pods/pod-nginx.yaml --record
# 也可以先下载到本地,再修改部署
wget https://k8s.io/examples/pods/pod-nginx.yaml --no-check-certificate
kubectl apply -f pod-nginx.yaml --record
# 查看 pod
kubectl get pod -o wide # 查看状态是否为Running 以及IP,立马查看可能显示处于Pending状态,可能要等一会才会显示为Running,如果一直是pending,说明其他地方有问题
# 查看 pod 详情,查看问题所在
kubectl describe pod pod-name
# 如果是节点标签问题导致容器调度失败,给节点设置标签
# 列出当前集群中的节点和它们的标签:
kubectl get nodes --show-labels
# 给节点node1 添加标签 disktype=ssd
kubectl label nodes node1 disktype=ssd
# 给节点node1 删除标签 disktype=ssd
kubectl label nodes node-1 disktype-
# 重新部署
kubectl apply -f pod-nginx.yaml --record

6.卸载k8s

yum -y remove kubelet kubeadm kubectl #卸载当前版本的kube系列,因为如果master和node1如果k8s版本不同也会报错
yum -y install kubeadm-1.22.0 kubectl-1.22.0 kubelet-1.22.0 #安装指定版本

7.重启master

#master上执行
kubeadm reset #这个命令就是重启集群
systemctl restart docker #启动docker服务
systemctl enable docker.service #自启动
systemctl start kubelet & systemctl status kubelet
kubeadm init --apiserver-advertise-address=10.255.xx.xx --image-repository registry.aliyuncs.com/google_containers
#master上执行,node1不需要(凡是在node1上执行报 Config not found: /etc/kubernetes/admin.conf的错的指令都是需要在master执行的
kubectl apply -f calico.yaml
kubectl get nodes

8.重启node1。下面的命令都是在node1上执行

#改了host之后好像需要需要kubeadm reset
kubeadm reset #这个命令就是重启集群
#如果报错10250端口被占用,就用这个查看进程号
netstat -anp |grep 10250
kill -9 进程号
systemctl restart docker #启动docker服务
systemctl enable docker.service
systemctl start kubelet & systemctl status kubelet
#node1上执行,先删除两个文件,这两个文件是在执行join的时候会自动生成,如果已存在则会报错
rm /etc/kubernetes/kubelet.conf
rm /etc/kubernetes/pki/ca.crt
kubeadm join 10.255.xx.xx:6443 --token 3nbxco.tvtwkyxxxxxxxxxxx \
        --discovery-token-ca-cert-hash sha256:8f142ba308e9bda7cab26e86ba44b1a7ca98654ab6c9xxxxxxxxxxxxxxxxxxxx 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

k8s集群搭建【1个master_1个node】 亲测成功! 的相关文章

随机推荐

  • 使用 Microchip SAM9X60 OTP 存储板卡的MAC地址和序列号

    1 介绍 SAM9X60 处理器有部分OTP One Time Programming Aera 可用于存储user data 这样的话我们就可以将板卡 MAC Address和 SN 序列号写到固定的OTP User Area中 为什么要
  • Python--根据计算公式:BMI = 体重(kg) / 身高(m)^2判断身体状况

    Python 根据计算公式 BMI 体重 kg 身高 m 2判断身体状况 身体质量指数 BMI Body Mass Index 是国际上常用的衡量人体肥胖程度和是否健康的重要标准 主要用于统计分析 肥胖程度的判断不能采用体重的绝对值 它天然
  • ajax将响应结果显示到iframe,JavaScript:iframe / Ajax / JSON

    iframe 在Ajax流行之前大量使用 iframe中的src属性指定的就是一个独立的页面url地址 iframe中呈现的就是这个页面的内容 通过改变src的值 我们就可以轻松的改变iframe中的内容 类似的 刷新验证码也是同样的手段
  • 嵌入式Linux移植5. LED驱动移植 添加LED驱动到内核,测试程序成功运行

    第一次尝试开发移植Linux上的驱动 还是和当年单片机一样 从最简单的LED小灯开始 走走流程 试验结果 LED驱动已经编译进系统 产生 o文件 LED测试程序已经编译成功 产生可执行文件 但是由于疫情手头没板子 没法上板测试 开学之后测试
  • 电脑安装 MIUI+

    windows电脑 打开命令框 输入下面命令 winget install Xiaomi MIUI 如果是小米笔记本 还可以通过 小米帮助中心 小米商城 mi com 进行下载安装
  • hive与hbase之间数据的同步

    一 前言 数据同步是很多公司在做数据迁移时的一个痛点 当然互联网公司有自己的同步机制或者工具 但是困惑了我这几天的需求 还是没有得到解决 事已至此 来写这篇博客记录一下自己最近的研究成果 二 如何同步 hive如何与Hbase直接实现数据同
  • ABAP & DOI NACE OUTPUT

    ABAP上传文件的TCODE SMW0 OAOR 现在遇到的业务需求是在VA03的订单通过SAP标准的OUTPUT配置打印出order confirmation以后 再打印公司的文字条款内容 WORD格式的两页纸 最开始想到的实现方式是在N
  • feign和ribbon有什么区别

    ribbon和feign都是用于调用其他服务的 不过方式不同 1 启动类使用的注解不同 ribbon用的是 RibbonClient feign用的是 EnableFeignClients 2 服务的指定位置不同 ribbon是在 Ribb
  • 【ssh】xshell的替代--WindTerm

    目录 WindTerm WindTerm 简介 如何关闭锁屏密码 3 功能 3 1 选中自动复制 右键粘贴复制的内容 3 2 打开软件自动连接 3 4 设置文件下载初始目录 4 可直接编辑bash命令行 5 界面管理 资源管理器 文件管理器
  • C++中struct的用法

    废话 struct是个很有用的东西呢 进入正题 struct的用处是定义一个新的类型 而这个类型里面可以是各种各样的东西 比如 struct node 定义一个新的类型叫node int a int b 110 char c double
  • ARM - UART4/串口软件实现字符串/字符的收发

    实验任务 1 在键盘输入一个字符 字符 1 并且打印在串口工具上 键盘输入 a gt 串口工具打印 b 2 串口工具输入一个字符串 按下回车键 会显示输入的字符串 头文件 ifndef UART4 H define UART4 H incl
  • 《MySQL是怎样运行的》——读书笔记

    MySQL是怎样运行的 小孩子4919 MySQL B 树 1 数据页 数据页之间双向链接 数据页内record单向链表 数据页内record分为多个组 每个组的最大记录组成数据槽 数据槽采用数组方式在页内存储 2 索引 索引记录为页的最小
  • nacos 安装并配置外部数据库

    参考链接 nacos 安装并配置外部数据库 亲测2 0 1 2 0 3 有效 zwb 121 博客园 Nacos 快速开始 下载链接 https github com alibaba nacos releases 启动服务器 Linux U
  • RocketMQ 消息过滤

    1 简介 RocketMQ分布式消息队列的消息过滤方式有别于其它MQ中间件 是在Consumer端订阅消息时 再做消息过滤的 RocketMQ这么做是在于其Producer端写入消息和Consumer端订阅消息采用分离存储的机制来实 现的
  • 拉格朗日函数(多个约束条件的极值问题)

  • Jetpack DataBinding(数据绑定库)笔记

    官方文档地址 https developer android google cn topic libraries data binding 作用或目的 将数据直接绑定到布局里面 减少了Activity Fragment的绑定控件操作 听说有
  • Nodejs net 接受包 并解码,第一次使用了 protobuf

    第一次使用 net 模块的 buffer 类型 对 buffer copy 开始不了解 走了弯路 调用的对象是 sourece 一直以为是 dest 对包进行分割 包的结构为 包内容长度 byte0 byte1 包内容 protobuf a
  • MacBook Pro 外接显示器设置竖屏

    调整步骤 系统设置偏好 gt 显示器 gt 点击排列 gt 镜像显示器 的 打上 然后切换回 显示器 此分类 gt 看到下面 的旋转了么 调整旋转90度 转自 http uiq me article 380
  • 用lingo解决易拉罐下料问题

    易拉罐下料问题 如下 程序如下 这里的xi 以万次为单位 yi 以万件为单位 model 易拉罐下料问题 max 0 100 y1 0 2226 x1 0 1833 x2 0 2618 x3 0 1695 x4 0 1571 y2 0 01
  • k8s集群搭建【1个master_1个node】 亲测成功!

    k8s集群搭建 k8s 1个master 1个node 集群搭建 步骤小结 1 安装docker 2 安装kubeadm kubectl kubelet 3 创建master节点的集群 并安装网络插件calico 4 添加node节点到集群