Mac M2芯 超详细k8s集群实战 - kubeadm

news2024/11/25 4:31:51

概述

我们准备搭建kubeadm的master+worker集群,实现k8s集群,master、worker在虚拟机上来执行,中间遇到了超级多的坑,都搞定了之后,在这里系统的总结一下,这也是一篇学习笔记。

这篇比较难搞,如果想了解入门级别的话,可以看之前的第一篇,用minikube实现的k8s。

  • Mac M2芯 k8s(minikube)超详细实战

安装kubeadm前的准备

安装kubeadm前的准备可以说是至关重要的一个环节,如果这个出错,就会造成后面的各种报错,每台机器里都要提前安装好docker。

master IP: 192.168.88.134
worker IP: 192.168.88.139
console IP: 192.168.88.136

1.改变hostnmae,把名字改成master

sudo vim /etc/hostname 

2.Docker 的配置做一点修改,在“/etc/docker/daemon.json”里把 cgroup 的驱动程序改成 systemd ,然后重启 Docker 的守护进程。
3.为了让 Kubernetes 能够检查、转发网络流量,你需要修改 iptables 的配置,启用“br_netfilter”模块。
4.你需要修改“/etc/fstab”,关闭 Linux 的 swap 分区。

操作的脚本我统一写在下面:

#!/bin/bash

# stark @ 2022-12

# https://kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
# https://kubernetes.io/zh/docs/setup/production-environment/container-runtimes/#docker

# sudo vi /etc/hostname

# fix docker issue
cat <<EOF | sudo tee /etc/docker/daemon.json
{
  "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


# iptables

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward=1 # better than modify /etc/sysctl.conf
EOF

sudo sysctl --system

# Disable Swap

sudo swapoff -a
sudo sed -ri '/\sswap\s/s/^#?/#/' /etc/fstab

# check

echo "please check these files:"
echo "/etc/docker/daemon.json"
echo "/etc/modules-load.d/k8s.conf"
echo "/etc/sysctl.d/k8s.conf"
echo "cat cat /etc/fstab"

执行这个shell脚本 ,sudo sh 文件名.sh

安装 kubeadm

执行下面的脚本,去.bashrc里面添加一下提示的命令:

sudo apt install -y apt-transport-https ca-certificates curl nfs-common

#sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -

#echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF

sudo apt update
sudo apt install -y kubeadm=1.23.3-00 kubelet=1.23.3-00 kubectl=1.23.3-00
sudo apt-mark hold kubeadm kubelet kubectl

# check
kubeadm version
kubectl version --client

source <(kubectl completion bash) ,执行 source .bashrc 生效。

ubuntu22.04 默认是关闭selinux的,( 我没有使用这个命令) 下面是关闭的命令:

vim /etc/selinux/config
SELINUX=disabled

安装 Master 节点

pod-network-cidr 可以给定默认的10.244.0.0,这样安装flannel网络插件的时候就会方便了。 image-repository registry.aliyuncs.com/google_containers 这句是自动安装kubernetes需要的指定的docker镜像。

sudo kubeadm init \
    --pod-network-cidr=10.244.0.0/16 \
    --apiserver-advertise-address=192.168.88.134 \
    --kubernetes-version=v1.23.3

kubeadm version
kubectl version --client

或者你可以先执行一下下载镜像的脚本:

#!/bin/bash

# stark @ 2022-04

# kubeadm config images list --kubernetes-version v1.23.3
# k8s.gcr.io/kube-apiserver:v1.23.3
# k8s.gcr.io/kube-controller-manager:v1.23.3
# k8s.gcr.io/kube-scheduler:v1.23.3
# k8s.gcr.io/kube-proxy:v1.23.3
# k8s.gcr.io/pause:3.6
# k8s.gcr.io/etcd:3.5.1-0
# k8s.gcr.io/coredns/coredns:v1.8.6

# use ali registry to speed up
repo=registry.aliyuncs.com/google_containers

for name in `kubeadm config images list --kubernetes-version v1.23.3`;
do
    # remove prefix
    src_name=${name#k8s.gcr.io/}
    src_name=${src_name#coredns/}

    docker pull $repo/$src_name

    # rename to fit k8s
    docker tag $repo/$src_name $name
    docker rmi $repo/$src_name
done

# flannel images
for name in `grep image flannel.yml |grep -v '#image' | sed 's/image://g' -`;
do
    docker pull $name
done

# check
docker images

如果初始化失败,可以使用 sudo kubeadm reset -f 进行重置:

在这里插入图片描述

安装完成以后这个才是最最最重要的地方!!!!

我解释一下提示的意思,这个地方在加入worker节点的时候也是重点需要理解的地方,非root用户执行下面的命令。

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

有的时候就会遇见 The connection to the server localhost:8080 was refused - did you specify the right host or port? 这个傻逼问题,这个可能是初始化准备的时候有问题,就得重试!用 sudo kubeadm reset 进行重试,如果你没有遇到,恭喜你那你是幸福的!

这个问题我回头会专门回答这个问题,已经知道原因了,我们先安装。

sudo rm $HOME/.kube
sudo rm -rf /etc/cni/net.d
sudo ipvsadm --clear

安装 Flannel 网络插件

git 网址 https://github.com/flannel-io/flannel/,底下有提示:

# For Kubernetes v1.17+
# If you use custom podCIDR (not 10.244.0.0/16) you first need to download the above manifest and modify the network to match your one.
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/v0.20.2/Documentation/kube-flannel.yml

到此,master节点已经安装好了

stark@master:~$ kubectl get node
NAME     STATUS   ROLES                  AGE   VERSION
master   Ready    control-plane,master   35m   v1.23.3

安装 Worker 节点

Worker 节点的准备工作和Master的一样,可以把Worker上准备好的sh脚本,在worker的服务器上在执行一遍:

把在master上kubeadm初始化成功的 kubeadm join 找到,在worker上执行,这个意思是加入到master的k8s集群中,如果找不到了,就执行kubeadm token create --print-join-command

kubeadm join 192.168.88.134:6443 --token k0yau8.mimrb35spiho0whw \
   --discovery-token-ca-cert-hash sha256:a26bf3d3da3cd4b09fc35cc29bf2170ea8fe43f99f7c2c18ad4634f011bb2c61
scp -r stark@192.168.88.134:~/sh ~

复制k8s文件,执行之前的命令:

sudo scp -r stark@192.168.88.134:/etc/kubernetes/admin.conf /etc/kubernetes/admin.conf

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

执行kubectl get nodes 命令,worker节点安装完毕:

worker@worker:~$ kubectl get nodes
NAME     STATUS   ROLES                  AGE     VERSION
master   Ready    control-plane,master   67m     v1.23.3
worker   Ready    <none>                 4m41s   v1.23.3

添加一个pod,测试,已经ok了。

kubectl run ngx --image=nginx:alpine
kubectl get pod -o wide

worker@worker:~$ kubectl get pod -o wide
NAME   READY   STATUS    RESTARTS   AGE   IP           NODE     NOMINATED NODE   READINESS GATES
ngx    1/1     Running   0          49s   10.244.1.2   worker   <none>           <none>

Console

Console就非常简单了,把文件直接从Master主机上scp过来就好了。

做一个补充,先下载kubectl的文件:

# 下载:
curl -LO https://dl.k8s.io/release/v1.23.3/bin/linux/arm64/kubectl

# 安装
sudo install kubectl /usr/local/bin/kubectl

# 从master节点复制文件

sudo scp stark@192.168.88.134:/etc/kubernetes/admin.conf /etc/kubernetes/admin.conf

执行一下刚才执行的:

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

至此,kubeadm的,master + worker + console 的环境搭建完成了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/116414.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【网络安全】Fastjson的反序列化漏洞复现

1.漏洞概述 Fastjson提供了autotype功能&#xff0c;允许用户在反序列化数据中通过“type”指定反序列化的类型&#xff0c;Fastjson自定义的反序列化机制时会调用指定类中的setter方法及部分getter方法&#xff0c;那么当组件开启了autotype功能并且反序列化不可信数据时&…

qt简单UI使用

geometry设置窗口大小 font字体大小 text改文件名

本地使用隧道或代理访问云服务器数据库

本地使用代理访问云服务器数据库 场景&#xff1a; 项目的测试环境是部署至云服务器上的&#xff0c;有时候云服务器的项目测试出现了一些问题&#xff0c;为了方便复现就在本地直连云服务器的数据库&#xff08;mysql服务器&#xff09;。但是云服务器是有三台机子&#xff0…

性能测试工程师技术履历表

技术履历表 基本情况 姓名 XXX 年龄 26 性别 男 工作年限 3-4 岗位 性能测试工程师 毕业院校和专业 武汉软件工程职业学院 学历 大专 技能评价 1、熟悉基于Http&#xff0c;TCP等协议的脚本开发。 2、 熟练掌握&#xff1a;Loadrunner等压测工具。 3、 掌握Linu…

Echosync 一款优秀的文件夹同步和备份软件

Echosync 一款优秀的文件夹同步和备份软件 通过执行差异数据备份、文件同步&#xff0c;这样可以避免传递自上次备份以来所做的更改&#xff0c;Echosync能够检测到移动或重命名自上次备份的文件。 下载 Echosync 软件介绍 VHD中备份文件 你的文件可以保存到单个 VHD 文件…

RK3568 ov5695摄像头

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言一、什么是mipi接口&#xff1f;二、摄像头是如何把数据给到RK3568,又是如何处理硬件连接关系图&#xff1a;图像数据的来龙去脉代码路径三、如何移植修改设备树…

高通开发系列 - 数字和模拟codec驱动

By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! 目录 MSM89XX音频硬件框架Linux kernel驱动LPASS的地址空间PM和PMI的区别PM8953简介Slave ID从设备idPM89xx中的模拟codec驱动准备codec的驱…

进程退出与等待

1️⃣ 进程退出 正常终止 main函数的返回调用exit_exit 异常终止 Ctrl c (信号终止) 1.main函数的返回就是return 0&#xff1b;程序退出这个在高级语言里面就学过了不多说。 2.exit(x)的使用如下 第一次测试&#xff1a;错误码与main函数里面打印的值。 第二次测试&#xf…

[oeasy]python0033_任务管理_jobs_切换任务_进程树结构_fg

查看进程 回忆上次内容 上次先进程查询 ps -elf 查看所有进程信息ps -lf 查看本终端相关进程信息 杀死进程 kill -9 PID 给进程发送死亡信号 运行多个 python3 show_time.py 的话 各个进程独立python3 show_time.py 大概 8M各占内存这些进程之间是什么关系呢&#xff1f;&…

秦海璐、宋轶现身,岳云鹏孙越成谜,央视春晚第一次彩排姗姗来迟

最近一段时间&#xff0c;全国各地的朋友都在积极行动&#xff0c;都想推迟成为小阳人的时间&#xff0c;却险些忘了一件大事。伴随着春节的临近&#xff0c;每年的央视春晚都倍受期待&#xff0c;今年当然也不例外&#xff0c;可是却一直没有央视春晚的消息。 就在大家都认为&…

利用adb查找手机定位,并且打开地图定位

可以使用 Android Debug Bridge (ADB) 工具来查找手机的位置信息。 首先&#xff0c;您需要确保手机已连接到电脑&#xff08;内网穿透或者搭建虚拟局域网&#xff09;&#xff0c;并且已在手机上启用 USB 调试。然后&#xff0c;您可以在电脑的命令提示符下使用 ADB 命令来查询…

小程序框架

目录 一&#xff0c;框架 二&#xff0c;响应的数据绑定 三&#xff0c;页面管理 四&#xff0c;基础组件 逻辑层 App Service 五&#xff0c;小程序的生命周期 六&#xff0c;注册页面 1.使用 Page 构造器注册页面 2.在页面中使用 behaviors 3.使用 Component 构造器…

[HAL库]STM32 ADC功能和DMA读数据的方法

这篇博客记录下 STM32F103R8T6 是怎么开ADC、用DMA搬数据的方法。方便日后使用的时候查资料。 DMA其实就是个搬运工&#xff0c;专门负责搬数据&#xff0c;没有DMA之前&#xff0c;搬数据是由MCU核心来负责&#xff0c;虽说都能完成搬数据的动作&#xff0c;但是MCU干这件事浪…

1.从一次提交中思考代码性能优化和stream的使用

前言 其实由来很简单&#xff0c;我们用了一个第三方的开源平台&#xff0c;这个平台基于 ruoyi 3.8.1 开发&#xff0c;我想后续同步到ruoyi的最新版 今天看的是 一个字典查询的commit&#xff0c;我们下来看下这次提交是如何优化的 分析 开门见山&#xff0c;我们看下代码…

PowerTCP FTP for .NET对.NET 7的支持

PowerTCP FTP for.NET是一个高级FTP和FTPS类库&#xff0c;具有易于使用的接口。它具有泛型、IPv6、双堆栈套接字、并发会话mX509证书&#xff0c;并包括完整的SSL和TLS集成。 用于.NET功能的PowerTCP FTP 流接口支持在没有文件访问的情况下创建或检查内存中的数据。 可序列…

过年不再被逼相亲——我用python给亲戚展示2022的相亲数据

人生苦短 我用Python 这不是快过年了吗&#xff1f; 又到了一年一度的亲戚大考验环节… 没对象的他们会问你&#xff0c;找对象了吗&#xff1f; 你要是学计算机专业的&#xff0c;他们会问你&#xff0c;会修电脑吗&#xff1f; 出去学了点啥他们也会要求“才艺展示一下 …

少儿Python每日一题(2):整数的位数

原题解答 本次的题目如下所示&#xff08;原题出处&#xff1a;蓝桥杯&#xff09;&#xff1a; 【编程实现】 输入一个正整数&#xff0c;输出这个正整数是一个几位数。 输入描述&#xff1a;输入一个正整数 输出描述&#xff1a;输出这个正整数是一个几位数 【样例输入】 12…

FineReport开源报表软件- 数据库表字段控制Tab块隐藏

1. 概述 1.1 预期效果 通过数据库表中设置的字段值&#xff0c;控制决策报表的每个 Tab 块是否显示&#xff0c;如下图所示&#xff1a; 数据库表字段&#xff1a;SITUATION 字段的值控制 Tab 是否显示。 效果展示&#xff1a;一共有 4 个 Tab 块&#xff1a;春、夏、秋、冬&…

Verilog HDL 硬件描述语言基础

HDL 硬件描述语言&#xff08;Hardware Description Lagnuage&#xff0c;HDL&#xff09;通过描述硬件的实现方法&#xff0c;来 产生与之对应的真实的硬件电路&#xff0c;最终实现所设计的预期功能。 Verilog HDL 和 C 语言的比较 C 语言所描述的代码功能在执行时都是一行…

K8s Liveness/Readiness/Startup 探针机制

官方参考文档 目录前言一、默认健康检测1.1 restartPolicy1.2 测试案例二、Liveness三、Readiness四、Startup前言 玩过 Docker Swarm 的应该都知道&#xff0c;有一种功能叫自愈功能&#xff0c;当集群检测到节点或服务故障时回进行自动故障转移&#xff0c;从而保障业务的可…