【kubernetes】k8s集群搭建(完整详解)

news2025/7/10 6:15:39

目录

 

一、准备工作

二、配置

1、修改主机名

2、修改hosts文件

3、关闭防火墙和SELinux

4、关闭swap

5、修改网卡配置

6、系统模块配置

7、免密登录

8、安装k8s和docker

9、查看k8s集群需要的镜像版本

10、初始化Master节点

11、node配置

12、拉取Nginx镜像进行配置


一、准备工作

环境基于Redhat8.5版本

1、准备三台虚拟机,IP地址为

master:192.168.10.129

node1:192.168.10.134

node2:192.168.10.136

也可以在一台上做,然后克隆另外俩台,修改主机名

二、配置

1、修改主机名

#在主节点的虚拟机
[root@mgr1 ~]# hostnamectl set-hostname k8s-master
#在node1的虚拟机
[root@mgr2 ~]# hostnamectl set-hostname k8s-node1
#在node2的虚拟机
[root@mgr3 ~]# hostnamectl set-hostname k8s-node2

2、修改hosts文件

[root@k8s-master ~]# vim /etc/hosts
192.168.10.129 k8s-master
192.168.10.134 k8s-node1
192.168.10.136 k8s-node2
#在node1,node2也是上面一样配置

3、关闭防火墙和SELinux

#三台都做
[root@k8s-master ~]# setenforce 0 
[root@k8s-node1 ~]# systemctl stop firewalld.service 
[root@k8s-node1 ~]# systemctl disable firewalld.service

4、关闭swap

#三台节点都做,注释掉包含swap这一行
[root@k8s-master ~]# vim /etc/fstab 
#/dev/mapper/rhel-swap   none                    swap    defaults        0 0

5、修改网卡配置

#三台节点都做
[root@k8s-master ~]# vim /etc/sysctl.d/kubernetes.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
[root@k8s-master ~]# sysctl -p

6、系统模块配置

#三台节点都做
[root@k8s-master ~]# modprobe br_netfilter    #加载系统模块
[root@k8s-master ~]# lsmod | grep br_netfilter    

7、免密登录

#三台都做
[root@k8s-master ~]ssh-keygen 
[root@k8s-master ~]ssh-copy-id root@192.168.10.129
[root@k8s-master ~]ssh-copy-id root@192.168.10.134
[root@k8s-master ~]ssh-copy-id root@192.168.10.136

8、安装k8s和docker

#三个节点都需要做
#配置yum源
[root@k8s-master ~]# cd /etc/yum.repos.d/
[root@k8s-master yum.repos.d]# cat k8s.repo 
[k8s]
name=k8s
baseurl=http://mirrors.ustc.edu.cn/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=0
[root@k8s-master yum.repos.d]# mount /dev/sr0 /mnt/
[root@master yum.repos.d]# wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo

sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo

dnf install -y yum-utils device-mapper-persistent-data lvm2
dnf install -y kubelet kubeadm kubectl
dnf remove podman -y
dnf install -y docker-ce
dnf install -y iproute-tc yum-utils device-mapper-persistent-data lvm2 kubelet-1.21.3 kubeadm-1.21.3 kubectl-1.21.3 docker-ce

#初始化
systemctl enable kubelet 
systemctl enable --now docker

修改docker配置文件

[root@k8s-master ~]# systemctl start docker    #docker初始化
[root@k8s-master ~]# vim /etc/docker/daemon.json
{
    "exec-opts": ["native.cgroupdriver=systemd"],
    "registry-mirrors": ["https://8zs3633v.mirror.aliyuncs.com"]
}
[root@k8s-master ~]# systemctl restart docker
[root@k8s-master ~]# systemctl enable docker.service 

9、查看k8s集群需要的镜像版本

注意:三个节点都需要做

[root@k8s-master yum.repos.d]# kubeadm config images list

再拉取这些镜像,执行一下步骤

docker pull kittod/kube-apiserver:v1.21.3
docker pull kittod/kube-controller-manager:v1.21.3
docker pull kittod/kube-scheduler:v1.21.3
docker pull kittod/kube-proxy:v1.21.3
docker pull kittod/pause:3.4.1
docker pull kittod/etcd:3.4.13-0
docker pull kittod/coredns:v1.8.0
docker pull kittod/flannel:v0.14.0

拉取完成后执行改变coredns的标记不然后面会找不到镜像,执行一下步骤

docker tag kittod/kube-apiserver:v1.21.3 k8s.gcr.io/kube-apiserver:v1.21.3
docker tag kittod/kube-controller-manager:v1.21.3 k8s.gcr.io/kube-controller-manager:v1.21.3
docker tag kittod/kube-scheduler:v1.21.3 k8s.gcr.io/kube-scheduler:v1.21.3
docker tag kittod/kube-proxy:v1.21.3 k8s.gcr.io/kube-proxy:v1.21.3
docker tag kittod/pause:3.4.1 k8s.gcr.io/pause:3.4.1
docker tag kittod/etcd:3.4.13-0 k8s.gcr.io/etcd:3.4.13-0
docker tag kittod/coredns:v1.8.0 k8s.gcr.io/coredns/coredns:v1.8.0
docker tag kittod/flannel:v0.14.0 quay.io/coreos/flannel:v0.14.0

10、初始化Master节点

kubeadm init \
--kubernetes-version=v1.21.3 \
--pod-network-cidr=10.244.0.0/16 \
--service-cidr=10.96.0.0/12 \
--apiserver-advertise-address=192.168.10.129 \

如果出现这个错误:

    [ERROR NumCPU]: the number of available CPUs 1 is less than the required 2

加上这个    --ignore-preflight-errors=all 

如果还不成功:
     systemctl stop kubelet
     rm -rf /etc/kubernetes/*
     systemctl stop docker 
        如果停止失败
            reboot
        docker container prune
        docer ps -a
        如果没有容器,就说明删干净了
     rm -rf /var/lib/kubelet/
     rm -rf /var/lib/etcd

初始化成功后会出现以下内容

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 192.168.10.129:6443 --token xwvae1.05gyglinbz62ui3i \
    --discovery-token-ca-cert-hash sha256:f2701ff3276b5c260900314f3871ba5593107809b62d741c05f452caad62ffa8

根据提示,操作

[root@k8s-master ~]# mkdir -p $HOME/.kube
[root@k8s-master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@k8s-master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
[root@k8s-master ~]# export KUBECONFIG=/etc/kubernetes/admin.conf

11、node配置

#俩node节点上做
[root@k8s-node1 ~]# kubeadm join 192.168.10.129:6443 --token xwvae1.05gyglinbz62ui3i --discovery-token-ca-cert-hash sha256:f2701ff3276b5c260900314f3871ba5593107809b62d741c05f452caad62ffa8

如果加入失败:
    1、kubeadm reset   -y
    2、
    rm -rf /etc/kubernetes/kubelet.conf
    rm -rf /etc/kubernetes/pki/ca.crt
    systemctl restart kubelet

1) 在master上查看节点状态

[root@k8s-master ~]# kubectl get nodes
NAME         STATUS     ROLES                  AGE     VERSION
k8s-master   NotReady   control-plane,master   3m48s   v1.21.3
k8s-node1    NotReady   <none>                 3m9s    v1.21.3
k8s-node2    NotReady   <none>                 3m6s    v1.21.3

发现此时是notready

2)查看集群pod状态

[root@k8s-master ~]# kubectl get pod -n kube-system
NAME                                 READY   STATUS    RESTARTS   AGE
coredns-558bd4d5db-46dzt             0/1     Pending   0          4m54s
coredns-558bd4d5db-vpqgl             0/1     Pending   0          4m54s
etcd-k8s-master                      1/1     Running   0          5m7s
kube-apiserver-k8s-master            1/1     Running   0          5m7s
kube-controller-manager-k8s-master   1/1     Running   0          5m7s
kube-proxy-bjxgt                     1/1     Running   0          4m32s
kube-proxy-bmjnz                     1/1     Running   0          4m54s
kube-proxy-z6jzl                     1/1     Running   0          4m29s
kube-scheduler-k8s-master            1/1     Running   0          5m7s

3)再看节点上查看日志

[root@k8s-master ~]# journalctl -f -u kubelet
-- Logs begin at Fri 2022-09-30 16:34:04 CST. --
Sep 30 17:57:25 k8s-master kubelet[23732]: E0930 17:57:25.097653   23732 kubelet.go:2211] "Container runtime network not ready" networkReady="NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized"
Sep 30 17:57:28 k8s-master kubelet[23732]: I0930 17:57:28.035887   23732 cni.go:239] "Unable to update cni config" err="no networks found in /etc/cni/net.d"
Sep 30 17:57:30 k8s-master kubelet[23732]: E0930 17:57:30.104181   23732 kubelet.go:2211] "Container runtime network not ready" networkReady="NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized"

出现了个错误

        runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized

解决问题:
        它说网络未准备好,缺少一个网络插件,那就安装一个

#在master上输入
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

再一次检查

[root@k8s-master ~]# kubectl get nodes
NAME         STATUS   ROLES                  AGE   VERSION
k8s-master   Ready    control-plane,master   45h   v1.21.3
k8s-node1    Ready    <none>                 45h   v1.21.3
k8s-node2    Ready    <none>                 45h   v1.21.3

master和node都ready了

12、拉取Nginx镜像进行配置

注意:只在master上做

docker pull nginx
#重新标记
docker tag nginx:latest kittod/nginx:1.21.5

创建部署

kubectl create deployment nginx --image=kittod/nginx:1.21.5

暴露端口

kubectl expose deployment nginx --port=80 --type=NodePort

查看pod和服务

[root@k8s-master ~]# kubectl get pods,service
NAME                         READY   STATUS    RESTARTS   AGE
pod/nginx-8675954f95-cvkvz   1/1     Running   0          2m20s

NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
service/kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP        46h
service/nginx        NodePort    10.98.220.104   <none>        80:30288/TCP   2m10s

查看映射的随机端口

[root@k8s-master ~]# netstat -lntup | grep kube-proxy
tcp        0      0 127.0.0.1:10249         0.0.0.0:*               LISTEN      3834/kube-proxy     
tcp        0      0 0.0.0.0:30288           0.0.0.0:*               LISTEN      3834/kube-proxy     
tcp6       0      0 :::10256                :::*                    LISTEN      3834/kube-proxy  

测试Nginx服务

完成。 

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

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

相关文章

【uniapp小程序】视图容器cover-view

&#x1f352;观众老爷们好呀&#xff0c;这里是前端小刘不怕牛牛频道&#xff0c;小程序系列又更新新文章啦&#xff0c;今天的内容是uniapp小程序的视图容器&#xff0c;cover-view &#x1f352;准备好了吗&#xff1f;那我们就发车啦&#xff0c;赶紧拿起小本本把笔记做起来…

10Wqps 超高并发 API网关 架构演进之路

说在前面 在尼恩的&#xff08;50&#xff09;读者社群中&#xff0c;经常遇到一个 API网关 架构方面的问题&#xff1a; (1) 尼恩老师&#xff0c;最近公司我们在规划业务出口网关(目的&#xff0c;整合规范外部调用&#xff0c;如短信平台 mqtt 等) 我在做整理技术方案&…

智能车竞赛:Infineon TC264单片机使用总结快速入门

本文主要是为了备赛第十八届全国大学生智能车竞赛&#xff0c;基于逐飞开源库和芯片数据手册的一些学习总结&#xff0c;使用英飞凌官方的AURIX Development Studio开发环境。 正如STM32的开发方式有标准库和HAL库&#xff0c;Infineon单片机也有官方库&#xff0c;而逐飞开源…

阿里P8大牛用实例跟你讲明白“Java 微服务架构实战”

全文一共十五章&#xff0c;核心内容为SpringBoot、SpringCloud、Docker、RabbitMQ消息组件。其中&#xff0c;SpringBoot是SpringMVC 技术的延伸&#xff0c;使用它进行程序开发会更简单&#xff0c;服务整合也会更容易。SpringCloud 是当前微架构的核心技术方案&#xff0c;属…

Spring Cloud Alibaba 微服务1,系统架构演变 + Nginx反向代理与负载均衡

目录专栏导读一、系统架构演变二、什么是Nginx&#xff1f;三、servername匹配规则四、正向代理与反向代理1、正向代理2、反向代理3、LVS五、负载均衡策略1、轮询2、权重3、ip_hash4、least_conn5、url_hash6、fair7、小结六、动静分离七、URLRewrite专栏导读 &#x1f3c6;作者…

【Linux系统】进程概念

目录 1 冯诺依曼体系结构 2 操作系统(Operator System) 概念 设计OS的目的 定位 总结 系统调用和库函数概念 3 进程 3.1 基本概念 3.2 描述进程-PCB 3.2 组织进程 3.3 查看进程 3.4 通过系统调用获取进程标示符 3.5 进程状态 在了解进程概念前我们还得了解下冯诺…

MongoDB详解,用心看这篇就够了【重点】

1.1 MongoDB概述 MongoDB是一个基于分布式文件存储的数据库。由C语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是一个介于关系数据库和非关系数据库之间的产品&#xff0c;是非关系数据库当中功能最丰富&#xff0c;最像关系数据库的。 它支持的数据…

业内人士真心话,软件测试是没有前途的,我慌了......

我在测试行业爬模滚打7年&#xff0c;从点点点的功能测试到现在成为高级测试&#xff0c;工资也翻了几倍。个人觉得&#xff0c;测试的前景并不差&#xff0c;只要自己肯努力。 我刚出来的时候是在鹅厂做外包的功能测试&#xff0c;天天点点点&#xff0c;很悠闲&#xff0c;点…

JS中的构造函数

构造函数 1.构造函数 创建一个构造函数&#xff0c;专门用来创建一个指定的对象的构造函数就是普通的函数&#xff0c;创建方式和普通函数没有区别&#xff0c;不同的是构造函数习惯上首字母大写构造函数和普通函数的区别就是调用方式不同 普通函数是直接调用的&#xff0c;而…

真题解析 | 2022数模美赛C题:股票投资策略

1、准备工作 1.1 题目背景 市场交易者频繁买卖波动性资产&#xff0c;目标是最大化其总回报。每次买卖通常都会有佣金。 两种这样的资产是黄金和比特币。 图 1&#xff1a;黄金每日价格&#xff0c;每金衡盎司美元。 资料来源&#xff1a;伦敦金银市场协会&#xff0c;2021 年…

javaScript实现动态规划(Dynamic Programming)01背包问题

&#x1f431; 个人主页&#xff1a;不叫猫先生 &#x1f64b;‍♂️ 作者简介&#xff1a;前端领域新星创作者、阿里云专家博主&#xff0c;专注于前端各领域技术&#xff0c;共同学习共同进步&#xff0c;一起加油呀&#xff01; &#x1f4ab;系列专栏&#xff1a;vue3从入门…

二十分钟带你了解JVM性能调优与实战进阶

ZGC 诞生原因 Java生态非常强大&#xff0c;但还不够&#xff0c;有些场景仍处于劣势&#xff0c;而ZGC的出现可以让Java语言抢占其他语言的某些特定领域市场。比如 谷歌主导的Android手机系统显示卡顿。证券交易市场&#xff0c;实时性要求非常高&#xff0c;目前主要是C主…

Day16【元宇宙的实践构想04】—— 元宇宙的安全

&#x1f483;&#x1f3fc; 本人简介&#xff1a;男 &#x1f476;&#x1f3fc; 年龄&#xff1a;18 ✍今日内容&#xff1a;《元宇宙的实践构想》04——元宇宙的安全 ❗❗❗从1.31日开始&#xff0c;阿亮每天会查阅一些元宇宙方面的小知识&#xff0c;和大家一起分享。一是由…

ChatGPT背后的技术和多模态异构数据处理的未来展望——我与一位资深工程师的走心探讨

上周&#xff0c;我和一位从业三十余年的工程师聊到ChatGPT。 作为一名人工智能领域研究者&#xff0c;我也一直对对话式大型语言模型非常感兴趣&#xff0c;在讨论中&#xff0c;我向他解释这个技术时&#xff0c;他瞬间被其中惊人之处所吸引&#x1f64c;&#xff0c;我们深…

读书笔记——《再见,平庸时代》

为什么会看这本书 《马斯克》这本书中&#xff0c;最后几段介绍了一下经济学家和作者泰勒考恩的两本书《大停滞》《再见&#xff0c;平庸时代》。《大停滞》讲的是美国这40年发展为何停滞&#xff0c;我当然不太关心这种内容。但是《再见&#xff0c;平庸时代》不是对历史的研究…

springboot 东方通(tongweb)替换tomcat

一.修改pom.xml文件依赖 1.排除springboot中内置的tomcat依赖 2.添加tongweb-spring-boot-starter和tongweb-embed依赖 特别说明下&#xff1a;我这里所有依赖的包都传到了私有仓库&#xff0c;直接复制到pom.xml文件会import失败。 <!-- SpringBoot Web容器 --> <d…

分享Python7个爬虫小案例(附源码)

本次的7个python爬虫小案例涉及到了re正则、xpath、beautiful soup、selenium等知识点&#xff0c;非常适合刚入门python爬虫的小伙伴参考学习。注&#xff1a;若涉及到版权或隐私问题&#xff0c;请及时联系我删除即可。 1.使用正则表达式和文件操作爬取并保存“某吧”某帖子…

【uniapp小程序实战】—— 使用腾讯地图获取定位

文章目录&#x1f34d;前言&#x1f34b;正文1、首先看官网uni.getLocation(OBJECT)#注意2、腾讯位置服务平台申请密钥和下载SDK2.1 申请开发者秘钥2.2 开通webserviceAPI服务2.3 下载微信小程序JavaScriptSDK2.4 安全域名设置3、配置manifest.json文件4、示例代码展示4.1 引用…

如何用Python求解微分方程组

文章目录odeint简介示例odeint简介 scipy文档中将odeint函数和ode, comples_ode这两个类称为旧API&#xff0c;是scipy早期使用的微分方程求解器&#xff0c;但由于是Fortran实现的&#xff0c;尽管使用起来并不方便&#xff0c;但速度没得说&#xff0c;所以有的时候还挺推荐…

JavaScript基础(详细总结)

目录 1、JavaScript简介 1.2、JavaScript的发展史 1.3、JavaScript的功能 1.4、JavaScript的特点 1.5、JavaScript组成 2、JavaScript基础语法 2.1、HTML引入JS 2.1.1、内部引入 2.1.2、外部引入 2.2、JS输出数据的三种方式 2.2.1、浏览器弹窗 2.2.2、输出HTML页面…