概述

我们准备搭建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"
}
EOFsudo systemctl enable docker
sudo systemctl daemon-reload
sudo systemctl restart docker# iptablescat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOFcat <<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
EOFsudo sysctl --system# Disable Swapsudo swapoff -a
sudo sed -ri '/\sswap\s/s/^#?/#/' /etc/fstab# checkecho "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
EOFsudo 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_containersfor name in `kubeadm config images list --kubernetes-version v1.23.3`;
do# remove prefixsrc_name=${name#k8s.gcr.io/}src_name=${src_name#coredns/}docker pull $repo/$src_name# rename to fit k8sdocker tag $repo/$src_name $namedocker rmi $repo/$src_name
done# flannel images
for name in `grep image flannel.yml |grep -v '#image' | sed 's/image://g' -`;
dodocker 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.confmkdir -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 wideworker@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 的环境搭建完成了。

Mac M2芯 超详细k8s集群实战 - kubeadm相关推荐

  1. 搭建K8s集群(kubeadm方式)-操作系统初始化

    使用kubeadm方式搭建K8S集群 kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具. 这个工具能通过两条指令完成一个kubernetes集群的部署: # 创建一个 Ma ...

  2. 搭建K8s集群(kubeadm方式)-部署node节点和集群测试

    部署CNI网络插件 上面的状态还是NotReady,下面我们需要网络插件,来进行联网访问 # 下载网络插件配置 wget https://raw.githubusercontent.com/coreo ...

  3. 搭建K8s集群(kubeadm方式)-部署master节点

    安装Docker/kubeadm/kubelet 所有节点安装Docker/kubeadm/kubelet ,Kubernetes默认CRI(容器运行时)为Docker,因此先安装Docker 安装D ...

  4. 从零开始搭建K8S集群(二)-- 搭建K8S集群

    一.下面我们开始搭建K8S集群 配置K8S的yum源(自v1.6.0起,Kubernetes默认启用了CRI,Container Runtime Interface,详情请查看官网:https://k ...

  5. Centos7 安装部署Kubernetes(k8s)集群过程

    1.系统环境 服务器版本 docker软件版本 CPU架构 CentOS Linux release 7.9 Docker version 20.10.12 x86_64 2.前言 如下图描述了软件部 ...

  6. 手把手从零开始搭建k8s集群超详细教程

    本教程根据B站课程云原生Java架构师的第一课K8s+Docker+KubeSphere+DevOps同步所做笔记教程 k8s集群搭建超详细教程 1. 基本环境搭建 1. 创建私有网络 2. 创建服务 ...

  7. Ubuntu20.04虚拟机使用Kubeadm从0到1搭建K8S集群(超详细)

    前言 最近在读张磊老师的<深入剖析Kubernets>,在阅读4.2节的时候遇到了问题,由于书上使用的版本已经过时,很多命令的执行都失败了,在经历了长达两个星期的折磨以后,我终于把这一节需 ...

  8. 【运维开发】Mac OS(10.13.6)使用 vagrant+VirtualBox +centos7搭建k8s集群

    Mac OS(10.13.6)使用 vagrant+VirtualBox +centos7搭建k8s集群步骤 环境准备工作 下载VirtualBox 地址:https://www.virtualbox ...

  9. kubeadm部署k8s集群最全最详细

    一.安装要求 kubeadm安装kubernetes1.15 在开始之前,部署Kubernetes集群机器需要满足以下几个条件: 1.一台或多台机器(≥3奇数个),操作系统 CentOS7.x(最好是 ...

最新文章

  1. 在Ubuntu 14.04 64bit上使用JBL Charge2+无线蓝牙音箱听歌指南
  2. iOS网络开发(8)文件下载的实现
  3. 关于Java你不知道的那些事之Java注解和反射
  4. c语言二维图形变换程序,【计算机图形学】3-2 二维几何变换根本代码
  5. java中如何将string 转化成long(亲测)
  6. 如何成为有思想、创新的程序员
  7. 【解题报告】Leecode 807. 保持城市天际线——Leecode每日刷题系列
  8. 身体好不是锻炼出来的
  9. pgsql 前10条_未来3年,广州83条城中村、285个旧街区将迎来改造
  10. sae mysql_connect_SAE连接数据库 - zxm的个人空间 - OSCHINA - 中文开源技术交流社区
  11. 极简主义APP界面UI设计实例模板,不简单!
  12. PYTHON——多线程:同步条件(Event)
  13. c++ 智能指针auto_ptr (c++98)、shared_ptr(c++ 11)、unique_ptr(c++ 11)、weak_ptr(c++ 11)
  14. Android+TensorFlow+CNN+MNIST实现手写数字识别
  15. Lucene的各中文分词比较
  16. 【Python爬虫】新手入门案例教学(一):爬取豆瓣电影排行有关信息
  17. 联想昭阳E43闪屏|屏幕有亮线|问题交流QQ群群号
  18. vim 常用指令与设置
  19. Springboot毕设项目共享单车管理系统93je9(java+VUE+Mybatis+Maven+Mysql)
  20. 关于SQL 与 NoSQL的区别

热门文章

  1. 费马小定理证明及应用
  2. 设计模式之创建型——工厂模式(3种)
  3. crx2rnx格式转换
  4. linux ss的使用方法
  5. RIGOL示波器编程使用
  6. 视频教程-卷积神经网络CNN-深度学习
  7. 现代永磁同步电机控制原理及matlab仿真_永磁同步电机是什么?
  8. brendan eich_编程领域的变革者:Brendan Eich
  9. deepfakes怎么用_如何使用 Deepfakes 换脸(示例代码)
  10. Kafka Manager 云平台用户使用手册 didi / Logi-KafkaManager