3.2.k8s搭建-kubeadm

2024-04-07 02:04
文章标签 云原生 搭建 k8s 3.2 kubeadm

本文主要是介绍3.2.k8s搭建-kubeadm,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、虚拟机准备

二、所有节点环境准备

1.所有节点做hosts解析

2.所有节点重新命名

3.所有节点安装docker

4.所有节点为docker做linux内核转发

5.所有节点配置docker

6.所有节点关闭swap分区

7.所有节点验证网卡硬件编号是否冲突

8.所有节点配置允许iptables桥接流量

9.所有关闭防火墙和selinux

三、k8s1节点安装harbor镜像仓库

1.安装harbor

2.验证是否成功

四、kubeadm方式部署k8s

1.所有节点安装部署组件

2.初始化master节点(k8s1)

3.验证下master节点组件

4.worker节点加入k8s集群

5.此时查看节点

6.master节点部署网络组件

7.查看节点状态,是否从notready变为ready

8.小彩蛋,命令补全

五、报错解决

报错1


 k8s多种搭建方式汇总:k8s搭建-多种方式汇总-CSDN博客

一、虚拟机准备

搭建学习环境,使用4台虚拟机centos7系统;

主机名称ip地址资源备注
k8s110.128.175.2512核4gmaster节点,harbor镜像仓库
k8s210.128.173.942核4gworker节点
k8s310.128.175.1962核4gworker节点

二、所有节点环境准备

1.所有节点做hosts解析

cat >> /etc/hosts <<EOF
10.128.175.251 k8s1 harbor.oslee.com
10.128.173.94 k8s2
10.128.175.196 k8s3
EOF

2.所有节点重新命名

hostnamectl set-hostname k8s1

hostnamectl set-hostname k8s2

hostnamectl set-hostname k8s3

3.所有节点安装docker

[root@k8s1 data]# cd /data
[root@k8s1 data]# ls
docker.tar.gz
[root@k8s1 data]# tar -xvf docker.tar.gz

[root@k8s1 data]# ls
docker.tar.gz  download  install-docker.sh
[root@k8s1 data]# sh install-docker.sh install

4.所有节点为docker做linux内核转发

因为,docker底层使用了iptables,在容器与宿主机端口映射时,需要源地址转发,共享网络,所以,需要做内核转发配置;

echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf

sysctl -p

5.所有节点配置docker

参数说明

"registry-mirrors": ["https://embkz39z.mirror.aliyuncs.com"], # 阿里云镜像加速,可以自己申请;

"insecure-registries": ["http://harbor.oslee.com"], #允许拉取自建仓库harbor仓库的镜像,后面有部署harbor的教程;

"exec-opts": ["native.cgroupdriver=systemd"]   #kubeadm去寻找的cgroup默认是systemd,而docker不配置的话,默认是cgroupfs,不配置这个,部署k8s时会报错;

"data-root": "/data/lib/docker" # docker存储数据目录;

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://embkz39z.mirror.aliyuncs.com"],"insecure-registries": ["http://harbor.oslee.com"],"exec-opts": ["native.cgroupdriver=systemd"],"data-root": "/data/lib/docker"
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl enable docker

6.所有节点关闭swap分区

[root@k8s1 data]# sed -ni '/^[^#]*swap/s@^@#@p' /etc/fstab
[root@k8s1 data]# free -h
              total        used        free      shared  buff/cache   available
Mem:            31G        357M         28G        9.1M        1.9G         30G
Swap:            0B          0B          0B

7.所有节点验证网卡硬件编号是否冲突

# 所有节点都执行,对比是否冲突

ifconfig eth0 |grep ether |awk '{print $2}'

cat /sys/class/dmi/id/product_uuid

8.所有节点配置允许iptables桥接流量

cat > /etc/modules-load.d/k8s.conf << EOF
br_netfilter
EOF

cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
net.ipv4.ip_forward=1
EOF

sysctl --system

9.所有关闭防火墙和selinux

#1,关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

#2,关闭selinux

setenforce 0
sed -i '7c SELINUX=disabled' /etc/selinux/config

三、k8s1节点安装harbor镜像仓库

1.安装harbor

#1,创建harbor工作目录

[root@k8s1 harbor]# mkdir -pv /data/harbor
[root@k8s1 harbor]# cd /data/harbor

#2,上传harbor本地安装包;

[root@k8s1 harbor]# ls
harbor-offline-installer-v2.3.1.tgz

#3,解压harbor安装包

[root@k8s1 harbor]# tar -xvf harbor-offline-installer-v2.3.1.tgz 

#4,查看harbor的目录文件

[root@k8s1 harbor]# ll harbor
total 618124
-rw-r--r-- 1 root root      3361 Jul 19  2021 common.sh
-rw-r--r-- 1 root root 632922189 Jul 19  2021 harbor.v2.3.1.tar.gz
-rw-r--r-- 1 root root      7840 Jul 19  2021 harbor.yml.tmpl
-rwxr-xr-x 1 root root      2500 Jul 19  2021 install.sh
-rw-r--r-- 1 root root     11347 Jul 19  2021 LICENSE
-rwxr-xr-x 1 root root      1881 Jul 19  2021 prepare

#5,复制修改harbor的配置文件名称
[root@k8s1 harbor]# cp harbor/harbor.yml.tmpl harbor/harbor.yml

#6,修改配置文件信息

[root@harbor harbor]# vim harbor/harbor.yml

...

hostname: harbor.oslee.com

...

################################################

#注释掉下面的信息

# https related config
# https:
#  # https port for harbor, default is 443
#  port: 443
#  # The path of cert and key files for nginx
#  certificate: /your/certificate/path
#  private_key: /your/private/key/path

################################################

harbor_admin_password: harbor123

# 启动harbor脚本

[root@k8s1 harbor]# ./harbor/install.sh

2.验证是否成功

[root@k8s1 harbor]# pwd
/data/harbor/harbor
[root@k8s1 harbor]# ls
common  common.sh  docker-compose.yml  harbor.v2.3.1.tar.gz  harbor.yml  harbor.yml.tmpl  install.sh  LICENSE  prepare
[root@k8s1 harbor]# docker-compose ps

本地windows浏览器访问;

注意:先配置windows本地hosts;

10.128.175.251 harbor.oslee.com

四、kubeadm方式部署k8s

1.所有节点安装部署组件

# 本地离线安装

#1,上传并解压软件包

[root@k8s1 data]# tar -xvf kubeadm-kubelet-kubectl.tar.gz

#2,所有节点本地安装

yum -y localinstall kubeadm-kubelet-kubectl/*.rpm

#3,设置启动及开机自启动k8s

systemctl enable --now kubelet.service

#4,查看状态(此时启动失败,不用管,因为还没配置完成,配置完之后自动回启动)

systemctl status kubelet.service

2.初始化master节点(k8s1)

如果你的初始化失败,想要重新初始化:kubeadm reset -f

rm -rf /etc/kubernetes/manifests/kube-apiserver.yaml
rm -rf /etc/kubernetes/manifests/kube-controller-manager.yaml
rm -rf /etc/kubernetes/manifests/kube-scheduler.yaml
rm -rf /etc/kubernetes/manifests/etcd.yaml
rm -rf /var/lib/etcd/*

[root@k8s1 data]# kubeadm init --kubernetes-version=v1.23.17 --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=10.100.0.0/16 --service-cidr=10.200.0.0/16 --service-dns-domain=oslee.com

参数释义:

--pod-network-cidr=10.100.0.0/16   #pod的网段

--service-cidr=10.200.0.0/16    #service资源的网段

--service-dns-domain=oslee.com  #service集群的dns解析名称

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/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/configAlternatively, if you are the root user, you can run:export KUBECONFIG=/etc/kubernetes/admin.confYou 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.35.8.50:6443 --token 19g89m.8susoikd7tl2c2n8 \--discovery-token-ca-cert-hash sha256:a4342264f0142b43a1ac1f7a1b66aafd04f915194d5298eb96b7b2d5bc292687 

#拷贝整数到家目录下

[root@k8s1 data]# mkdir -p $HOME/.kube
[root@k8s1 data]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@k8s1 data]# sudo chown $(id -u):$(id -g) $HOME/.kube/config

3.验证下master节点组件

#1,查看master组件

[root@k8s1 data]# kubectl get cs
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME                 STATUS    MESSAGE                         ERROR
scheduler            Healthy   ok                              
controller-manager   Healthy   ok                              
etcd-0               Healthy   {"health":"true","reason":""}

4.worker节点加入k8s集群

# 上面初始化master节点时生成的

kubeadm join 10.35.8.50:6443 --token 19g89m.8susoikd7tl2c2n8 \
        --discovery-token-ca-cert-hash sha256:a4342264f0142b43a1ac1f7a1b66aafd04f915194d5298eb96b7b2d5bc292687

# 如果过期了,可重新生成

kubeadm token create --print-join-command

5.此时查看节点

[root@k8s1 ~]# kubectl get nodes
NAME   STATUS     ROLES                  AGE     VERSION
k8s1   NotReady   control-plane,master   22m     v1.23.17
k8s2   NotReady   <none>                 4m10s   v1.23.17
k8s3   NotReady   <none>                 15s     v1.23.17

################

此时发现,状态显示“没准备好”,是因为未有CNI网络组件

6.master节点部署网络组件

#1,本地上传网络组建文件

[root@k8s1 data]# ls kube-flannel.yml 
kube-flannel.yml
[root@k8s231 ~]# vim kube-flannel.yml

  net-conf.json: |
    {
      "Network": "10.100.0.0/16",
      "Backend": {
        "Type": "vxlan"
      }
    }
 

#3,部署flannel组件

[root@k8s231 ~]# kubectl apply -f kube-flannel.yml

#4,查看flannel组件是否成功创建pod(每个节点是否都有)

[root@k8s231 ~]# kubectl get pods -A -o wide | grep flannel

7.查看节点状态,是否从notready变为ready

[root@k8s1 data]# watch -n 2 kubectl get nodes

NAME   STATUS   ROLES                  AGE     VERSION
k8s1   Ready    control-plane,master   7m41s   v1.23.17
k8s2   Ready    <none>                 4m33s   v1.23.17
k8s3   Ready    <none>                 3m13s   v1.23.17

8.小彩蛋,命令补全

yum -y install bash-completion
kubectl completion bash > ~/.kube/completion.bash.inc
echo "source '$HOME/.kube/completion.bash.inc'" >> $HOME/.bash_profile
source $HOME/.bash_profile

五、报错解决

报错1

[preflight] Running pre-flight checks
        [WARNING Hostname]: hostname "k8s2" could not be reached
        [WARNING Hostname]: hostname "k8s2": lookup k8s2 on 10.128.86.49:53: no such host
error execution phase preflight: [preflight] Some fatal errors occurred:
        [ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
To see the stack trace of this error execute with --v=5 or higher

# 临时解决

echo "1">/proc/sys/net/bridge/bridge-nf-call-iptables
echo "1">/proc/sys/net/bridge/bridge-nf-call-ip6tables

# 永久解决

## 在/etc/sysctl.conf中添加: 
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1

## 执行sysctl -p
如果出现 缺少文件的现象

sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-iptables: 没有那个文件或目录

则确认是否驱动加载完成

## 驱动加载
modprobe br_netfilter 
bridge

这篇关于3.2.k8s搭建-kubeadm的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/881378

相关文章

一份LLM资源清单围观技术大佬的日常;手把手教你在美国搭建「百万卡」AI数据中心;为啥大模型做不好简单的数学计算? | ShowMeAI日报

👀日报&周刊合集 | 🎡ShowMeAI官网 | 🧡 点赞关注评论拜托啦! 1. 为啥大模型做不好简单的数学计算?从大模型高考数学成绩不及格说起 司南评测体系 OpenCompass 选取 7 个大模型 (6 个开源模型+ GPT-4o),组织参与了 2024 年高考「新课标I卷」的语文、数学、英语考试,然后由经验丰富的判卷老师评判得分。 结果如上图所

【网络安全的神秘世界】搭建dvwa靶场

🌝博客主页:泥菩萨 💖专栏:Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 下载DVWA https://github.com/digininja/DVWA/blob/master/README.zh.md 安装DVWA 安装phpstudy https://editor.csdn.net/md/?articleId=1399043

cocospod 搭建环境和使用

iOS 最新版 CocoaPods 的安装流程 1.移除现有Ruby默认源 $gem sources --remove https://rubygems.org/ 2.使用新的源 $gem sources -a https://ruby.taobao.org/ 3.验证新源是否替换成功 $gem sources -l 4.安装CocoaPods (1)  $sudo gem

Apache2.4+PHP7.2环境搭建

Editplus生成码:http://www.jb51.net/tools/editplus/ 阿帕奇下载地址:https://www.apachehaus.com/cgi-bin/download.plx PHP下载地址:http://windows.php.net/download#php-7.2 1.打开阿帕奇的下载地址,点击下载。

云原生容器技术入门:Docker、K8s技术的基本原理和用途

🐇明明跟你说过:个人主页 🏅个人专栏:《未来已来:云原生之旅》🏅 🔖行路有良友,便是天堂🔖 目录 一、容器技术概述 1、什么是容器技术 2、容器技术的历史与发展 3、容器技术与虚拟机的比较 4、容器技术在云原生中的作用 二、Docker基础 1、Docker简介 2、Docker架构 3、Docker与工作原理 三、Kubernetes(k8s)基础 1、

Solr集群的搭建和使用(2)

1   什么是SolrCloud   SolrCloud(solr 云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud。当一个系统的索引数据量少的时候是不需要使用SolrCloud的,当索引量很大,搜索请求并发很高,这时需要使  用SolrCloud来满足这些需求。   SolrCloud是基于Solr和Zookeeper的分布式搜索

基于LangChain框架搭建知识库

基于LangChain框架搭建知识库 说明流程1.数据加载2.数据清洗3.数据切分4.获取向量5.向量库保存到本地6.向量搜索7.汇总调用 说明 本文使用openai提供的embedding模型作为框架基础模型,知识库的搭建目的就是为了让大模型减少幻觉出现,实现起来也很简单,假如你要做一个大模型的客服问答系统,那么就把历史客服问答数据整理好,先做数据处理,在做数据向量化,最后保

DK盾-服务器 + docusaurus搭建

DK盾云服务器官网:https://www.dkdun.cn 详细可看我的github博客https://mumuzi7179.github.io/docs/Blog/%E5%8F%8B%E9%93%BE 主要是CSDN审核不通过 DK盾CTF群–727077055 以下是为了审核通过顺带写的。。 Docusaurus搭建 第一步,安装npm curl -fsSL https://

Android从零开始搭建MVVM架构(5)—— LifeCycle详解

1.Lifecycle简介 为什么要使用lifecycle? activity 和fragment 是有声明周期的,有时候,我们的很多操作需要写在声明周期的方法中,比如,下载,文件操作等,这样很多情况下回导致,我们在activity中的声明周期方法中写越来越多的代码,activity或者fragment 越来越臃肿,代码维护越来越困难。 使用lifecycle就可以很好的解决这类问题。 lifec

Android从零开始搭建MVVM架构(4)——LiveData

LiveData 介绍 Livedata 是 Google 推荐的 Android 架构组件之一,是一个存放可被观察的数据持有类,有生命周期感知功能,解决了android开发者需要去手动处理生命周期的痛点。 比如当我们使用 Retrofit+Rxjava处理接口回调数据时,需要考虑activity 或 fragment 生命周期,以解决 onStop 或 onDestory之后回调数据的问题。现