k8s简介,k8s环境搭建

目录

    • K8s简介
    • 环境搭建和准备工作
      • 修改主机名(所有节点)
      • 配置静态IP(所有节点)
      • 关闭防火墙和seLinux,清除iptables规则(所有节点)
      • 关闭交换分区(所有节点)
      • 修改/etc/hosts文件(所有节点)
      • 配置ssh免密登录(master节点)
      • 加载模块br_netfilter(所有节点)
      • 修改内核参数以满足k8s的运行需求(所有节点)
      • 配置centos7镜像源(所有节点)
    • 安装docker(所有节点)
    • 安装k8s(所有节点)
      • master节点初始化(master节点)
      • 在node1和node2节点执行join
      • 使用kubectl管理集群(master节点)
    • 安装CNI网络插件
      • 安装Calico(master节点)

K8s简介

Kubernetes(简称 K8s)是一个开源的容器编排平台。
起源与发展

  • K8s 最初由谷歌公司开发,于 2014 年开源。它借鉴了谷歌内部大规模容器管理的经验和技术,旨在为容器化应用提供一个高效、可靠、可扩展的管理平台。
  • 随着容器技术的快速发展和广泛应用,K8s 迅速成为容器编排领域的事实标准,被众多企业和组织广泛采用,并且在不断地发展和完善中,社区活跃度极高,持续推动着 K8s 功能的丰富和性能的提升。

主要组件

  • Master 节点:是 K8s 集群的控制中心,负责管理和协调整个集群。包含 API Server、Scheduler、Controller Manager 等组件,API Server 提供了 K8s 的 API 接口,用于接收和处理用户请求;Scheduler 负责将 Pod 调度到合适的 Node 节点上;Controller Manager 负责管理和维护集群中各种资源的状态。
  • Node 节点:是 K8s 集群中的工作节点,用于运行容器化应用。包含 kubelet、kube-proxy 等组件,kubelet 负责与 Master 节点通信,接收并执行 Master 节点下达的任务,管理本节点上的容器;kube-proxy 负责实现 Pod 的网络代理和负载均衡功能。

环境搭建和准备工作

使用三台一模一样的centos7虚拟机,内存4G,4核,40G磁盘,一台做master,另外两台做node。

[root@localhost ~]# cat /etc/centos-release
CentOS Linux release 7.9.2009 (Core)
[root@localhost ~]# uname -a
Linux localhost.localdomain 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
[root@localhost ~]#

修改主机名(所有节点)

分别执行。

hostnamectl set-hostname master
hostnamectl set-hostname node1
hostnamectl set-hostname node2

配置静态IP(所有节点)

vim /etc/sysconfig/network-scripts/ifcfg-ens33

# 将BOOTPROTO从dhcp改为static或none
BOOTPROTO=static
# 若没有ONBOOT添加
ONBOOT=yes
# 下面的都需要添加,如果在桥接模式下ip地址要和实体机相同网段,网关要和实体机网关相同。如果是nat则和nat网段相同。
IPADDR=192.168.3.147
PREFIX=24
GATEWAY=192.168.3.1
#DNS服务器可以只配置一个,当然也可以配置两个
DNS1=114.114.114.114
DNS2=8.8.8.8

配置完成后重启网络服务

systemctl restart network

关闭防火墙和seLinux,清除iptables规则(所有节点)

为了防止干扰k8s运行。

# 关闭防火墙并且设置开机不启动
systemctl stop firewalld
systemctl disable firewalld
# 关闭seLinux,getenforce是获取seLinux的状态
# 没有设置过seLinux一般getenforce查询结果为Enforcing,需设置为disable关闭
getenforce
# 直接修改文件,改为SELINUX=disabled,重启之后生效
vim /etc/selinux/config
# 清除iptables规则
iptables -F

在这里插入图片描述

关闭交换分区(所有节点)

高版本的k8s要求必须关闭分区。

# 临时关闭
swapoff -a
# 修改/etc/fstab文件永久关闭,将文件中/dev/mapper/centos-swap swap行注释即可,也可以直接运行下面这条命令
sed -i '/swap/ s/^\(.*\)$/#\1/g' /etc/fstab

修改/etc/hosts文件(所有节点)

# 直接运行下面的命令,记得将IP地址修改为自己机器的IP地址,主机名字也换成自己的
cat >> /etc/hosts << EOF
192.168.3.147 master
192.168.3.146 node1
192.168.3.145 node2
EOF

配置ssh免密登录(master节点)

先生成密钥

ssh-keygen

再复制到所有节点

ssh-copy-id master
ssh-copy-id node1
ssh-copy-id node2

测试连接,免密登录

ssh node1
# 登出
exit

加载模块br_netfilter(所有节点)

# 临时加载
modprobe br_netfilter
# 永久加载,创建文件,在文件中写入模块名字br_netfilter
vim /etc/modules-load.d/k8s.conf

systemctl restart systemd-modules-load.service

修改内核参数以满足k8s的运行需求(所有节点)

cat <<EOF >> /etc/sysctl.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_nonlocal_bind = 1
net.ipv4.ip_forward = 1
vm.swappiness=0
EOF

# 重新加载系统参数配置,让上面的修改生效
sysctl -p

配置centos7镜像源(所有节点)

报错:

  • Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=stock error was

CentOS 7 仓库已经被归档,当前的镜像地址无法找到所需的文件。CentOS 7 的官方支持已经结束,部分仓库已被移至归档库。导致 yum 命令无法找到所需的元数据文件。

cd /etc/yum.repos.d
mv CentOS-Base.repo   CentOS-Base.repo.backup
vim CentOS-Base.repo

添加如下内容

# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client.  You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the 
# remarked out baseurl= line instead.
#
#
 
[base]
name=CentOS-$releasever - Base
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
#baseurl=http://vault.centos.org/7.9.2009/x86_64/os/
baseurl=http://vault.centos.org/7.9.2009/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
 
#released updates 
[updates]
name=CentOS-$releasever - Updates
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
#baseurl=http://vault.centos.org/7.9.2009/x86_64/os/
baseurl=http://vault.centos.org/7.9.2009/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
 
#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra
#$baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
#baseurl=http://vault.centos.org/7.9.2009/x86_64/os/
baseurl=http://vault.centos.org/7.9.2009/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
 
#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
#baseurl=http://vault.centos.org/7.9.2009/x86_64/os/
baseurl=http://vault.centos.org/7.9.2009/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

再添加阿里镜像源。

wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

执行生效。

um clean all
um makecache

安装docker(所有节点)

#安装工具包
yum install -y yum-utils
# 使用工具包自动下载docker,这是官方的源,太卡
#yum-config-manager \
#    --add-repo \
#    https://download.docker.com/linux/centos/docker-ce.repo
    
#建议使用阿里云镜像替换官方源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 指定版本安装docker
yum install -y docker-ce-20.10.0 docker-ce-cli-20.10.0 containerd.io

# 开启docker服务
systemctl start docker
# 设置开机启动
systemctl enable docker
  • 配置Docker使用systemd作为默认Cgroup驱动。
  • 配置docker镜像源。
vim /etc/docker/daemon.json
{
	"registry-mirrors": [
        "https://71v143bd.mirror.aliyuncs.com",
        "https://docker.m.daocloud.io"
    ],
	"exec-opts": ["native.cgroupdriver=systemd"]
}

#重启docker
systemctl daemon-reload
systemctl restart docker

安装k8s(所有节点)

添加k8s yum源

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

安装kubeadm,kubelet,kubectl(指定版本)

yum install -y kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6

设置kubelet开机自启动

systemctl enable kubelet

安装CoreDNS容器(k8s集群运行时需要CoreDNS提供DNS解析服务)

docker pull registry.aliyuncs.com/google_containers/coredns:v1.8.4

master节点初始化(master节点)

使用kubeadm init命令进行初始化。

  • apiserver-advertise-address修改为master主机IP地址。
  • –pod-network-cidr有两个值,打算使用calico网络插件时,最好使用192.168.0.0/16,打算使用flannel网络插件时最好使用10.244.0.0/16;这两个都是相应网络插件的默认IP,否则需要修改对应配置文件。
kubeadm init \
--apiserver-advertise-address=192.168.3.147 \
--image-repository registry.aliyuncs.com/google_containers \
--service-cidr=10.1.0.0/16 \
#--pod-network-cidr=10.244.0.0/16
--pod-network-cidr=192.168.0.0/16
--kubernetes-version=v1.23.6

等待几分钟,看到下面的内容说明成功了。
注意红圈中的命令,在节点机器运行kubeadm join部分的命令加入节点。
在这里插入图片描述

在node1和node2节点执行join

kubeadm join 192.168.3.147:6443 --token v2q814.ab6aywry0350o52v \
	--discovery-token-ca-cert-hash sha256:4fe3d2cebdcb34b198e43bfd1453d15bbad5cac7b98c902776a7795bd26214ec

执行成功输出:
在这里插入图片描述

使用kubectl管理集群(master节点)

初始化kubectl

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

查看节点状态

kubectl get node

在这里插入图片描述
到这里发现所有节点为NotReady状态,这是因为完成互通还需要安装CNI(Container Networking Interface)网络插件。

安装CNI网络插件

CNI 全称是“Container Networking Interface”,即容器网络接口,它提供了一种标准的插件机制,用于连接容器到底层网络中。CNI 插件是一种可执行程序,它将实现容器网络连接的一些逻辑打包在一起,允许容器使用不同的网络模型,并提供了一组网络抽象接口。在 Kubernetes 等容器编排平台中,CNI 插件被广泛使用来实现容器网络。

CNI 插件可以由第三方厂商开发和维护,因此,可以选择最适合自己的插件。CNI 插件通常运行在主机上,并由容器运行时调用,例如 Docker、rkt 等。当容器需要连接到主机网络时,CNI 插件将会为其创建必要的网络接口和路由规则。

一些常用的 CNI 插件包括:

  • Flannel:一个简单易用的网络解决方案,支持多种部署模式。
  • Calico:一个高度可扩展的容器网络方案,旨在为大规模生产环境提供网络和安全性。
  • Weave Net:一个分布式的容器网络方案,具有良好的可扩展性和高度自动化的管理。
  • Cilium:一个基于 eBPF 的容器网络和安全解决方案,提供强大的流量控制和安全性。

安装Calico(master节点)

先创建个文件夹,用于存放配置文件:

mkdir -p /work/devops/k8s/config
cd /work/devops/k8s/config

下载calico配置文件

wget https://docs.tigera.io/archive/v3.25/manifests/calico.yaml

修改calico配置文件

vim calico.yaml 

原来的配置

# - name: CALICO_IPV4POOL_CIDR
#   value: "192.168.0.0/16"

修改后的配置(注意:value与上边kubeadm init的–pod-network-cidr参数保持一致)

  • 特别注意:修改的两行一定要注意缩进和上面的内容保持一致,否则会报奇奇怪怪的错误。
    在这里插入图片描述

启用calico

kubectl apply -f ./calico.yaml

在这里插入图片描述

查看pod状态

kubectl get pods -A

Calico的状态错误Init:ImagePullBackOff或Init:ErrImagePull,镜像没有拉取成功。
在这里插入图片描述
可以删除失败pod,重新拉取,但通常还是失败,calico-node-bvvhc替换成实际镜像名称。

kubectl  get pods -n kube-system | grep calico-node-bvvhc   | awk '{print$1}'| xargs kubectl delete -n kube-system pods

可以手动拉取calico,注意这一步所有节点都要执行

docker pull calico/cni:v3.25.0

上一步完成后,再次查询pod状态,镜像已经在拉取了。

kubectl get pods -A

在这里插入图片描述

查询节点状态,都是Ready。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

苯乙醇苷类化合物的从头生物合成-文献精读108

Complete pathway elucidation of echinacoside in Cistanche tubulosa and de novo biosynthesis of phenylethanoid glycosides 管花肉苁蓉中松果菊苷全生物合成途径解析及苯乙醇苷类化合物的从头生物合成 摘要 松果菊苷&#xff08;ECH&#xff09;是最具代表性的苯乙醇苷…

C++ 新特性实现 ThreadPool

序言 在之前我们实现过线程池&#xff0c;但是非常基础。答题思路就是实现一个安全的队列&#xff0c;再通过 ThreadPool 来管理队列和线程&#xff0c;对外提供一个接口放入需要执行的函数&#xff0c;但是这个函数是无参无返回值的。  参数的问题我们可以使用 bind 来封装&a…

网络攻防实战指北专栏讲解大纲与网络安全法

专栏 本专栏为网络攻防实战指北&#xff0c;大纲如下所示 进度&#xff1a;目前已更完准备篇、HTML基础 计划&#xff1a;所谓基础不牢&#xff0c;地动山摇。所以下一步将持续更新基础篇内容 讲解信息安全时&#xff0c;结合《中华人民共和国网络安全法》&#xff08;以下简…

计算机网络——流量控制

流量控制的基本方法是确保发送方不会以超过接收方处理能力的速度发送数据包。 通常的做法是接收方会向发送方提供某种反馈&#xff0c;如&#xff1a; &#xff08;1&#xff09;停止&等待 在任何时候只有一个数据包在传输&#xff0c;发送方发送一个数据包&#xff0c;…

知识库管理系统助力企业实现知识共享与创新价值的转型之道

内容概要 知识库管理系统&#xff08;KMS&#xff09;作为现代企业知识管理的重要组成部分&#xff0c;其定义涵盖了系统化捕捉、存储、共享和应用知识的过程。这类系统通过集成各种信息来源&#xff0c;不仅为员工提供了一个集中式的知识平台&#xff0c;还以其结构化的方式提…

⼆叉树的存储(上)c++

在前几天写的树&#xff0c;我们已经了解到树的存储&#xff0c;⼆叉树也是树&#xff0c;也是可以⽤vector数组或者链式前向星来存储。仅需在存储的过程中标记谁是左孩⼦&#xff0c;谁是右孩⼦即可。 ⽐如⽤ vector 数组存储时&#xff0c;可以先尾插左孩⼦&#xff0c;再尾…

2025创业思路和方向有哪些?

创业思路和方向是决定创业成功与否的关键因素。以下是一些基于找到的参考内容的创业思路和方向&#xff0c;旨在激发创业灵感&#xff1a; 一、技术创新与融合&#xff1a; 1、智能手机与云电视结合&#xff1a;开发集成智能手机功能的云电视&#xff0c;提供通讯、娱乐一体化体…

研发的护城河到底是什么?

0 你的问题&#xff0c;我知道&#xff01; 和大厂朋友聊天&#xff0c;他感叹原来努力干活&#xff0c;做靠谱研发&#xff0c;积累职场经验&#xff0c;干下来&#xff0c;职业发展一般问题不大。而如今大厂“年轻化”&#xff0c;靠谱再不能为自己续航&#xff0c;企业似乎…

FreeRTOS从入门到精通 第十五章(事件标志组)

参考教程&#xff1a;【正点原子】手把手教你学FreeRTOS实时系统_哔哩哔哩_bilibili 一、事件标志组简介 1、概述 &#xff08;1&#xff09;事件标志位是一个“位”&#xff0c;用来表示事件是否发生。 &#xff08;2&#xff09;事件标志组是一组事件标志位的集合&#x…

学习数据结构(5)单向链表的实现

&#xff08;1&#xff09;头部插入 &#xff08;2&#xff09;尾部删除 &#xff08;3&#xff09;头部删除 &#xff08;4&#xff09;查找 &#xff08;5&#xff09;在指定位置之前插入节点 &#xff08;6&#xff09;在指定位置之后插入节点 &#xff08;7&#xff09;删除…

Golang :用Redis构建高效灵活的应用程序

在当前的应用程序开发中&#xff0c;高效的数据存储和检索的必要性已经变得至关重要。Redis是一个快速的、开源的、内存中的数据结构存储&#xff0c;为各种应用场景提供了可靠的解决方案。在这个完整的指南中&#xff0c;我们将学习什么是Redis&#xff0c;通过Docker Compose…

18 大量数据的异步查询方案

在分布式的应用中分库分表大家都已经熟知了。如果我们的程序中需要做一个模糊查询&#xff0c;那就涉及到跨库搜索的情况&#xff0c;这个时候需要看中间件能不能支持跨库求交集的功能。比如mycat就不支持跨库查询&#xff0c;当然现在mycat也渐渐被摒弃了(没有处理笛卡尔交集的…

Redis代金卷(优惠卷)秒杀案例-单应用版

优惠卷表:优惠卷基本信息,优惠金额,使用规则 包含普通优惠卷和特价优惠卷(秒杀卷) 优惠卷的库存表:优惠卷的库存,开始抢购时间,结束抢购时间.只有特价优惠卷(秒杀卷)才需要填写这些信息 优惠卷订单表 卷的表里已经有一条普通优惠卷记录 下面首先新增一条秒杀优惠卷记录 { &quo…

编程题-三数之和(中等)

题目&#xff1a; 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。注意&#xff1a;答案中不可以包含重复的三…

过年回家的意义,

年前&#xff0c;我特想让家里人到深圳过年&#xff0c;想让他们看看深圳&#xff0c;看看外面好玩的样子&#xff0c;跟我妈提了两次&#xff0c;她两次的借口都是家里养着的那几头猪&#xff0c;还有好多鸡鸭要喂&#xff0c;说家里一定得要有人守&#xff0c;人走远是不行的…

一文读懂 Faiss:开启高维向量高效检索的大门

一、引言 在大数据与人工智能蓬勃发展的当下&#xff0c;高维向量数据如潮水般涌现。无论是图像、音频、文本&#xff0c;还是生物信息领域&#xff0c;都离不开高维向量来精准刻画数据特征。然而&#xff0c;在海量的高维向量数据中进行快速、准确的相似性搜索&#xff0c;却…

扩展无限可能:Obsidian Web Viewer插件解析

随着 Obsidian 1.8.3 正式版的发布&#xff0c;备受期待的官方核心插件——Web Viewer 也终于上线。本文将从插件启用、设置以及应用场景三个方面详细介绍如何使用这一新功能&#xff0c;和大家一起更好地利用 Obsidian 进行内容管理和知识整理。 插件启用 Web Viewer作为官方…

22.Word:小张-经费联审核结算单❗【16】

目录 NO1.2 NO3.4​ NO5.6.7 NO8邮件合并 MS搜狗输入法 NO1.2 用ms打开文件&#xff0c;而不是wps❗不然后面都没分布局→页面设置→页面大小→页面方向→上下左右&#xff1a;页边距→页码范围&#xff1a;多页&#xff1a;拼页光标处于→布局→分隔符&#xff1a;分节符…

仿真设计|基于51单片机的贪吃蛇游戏

目录 具体实现功能 设计介绍 51单片机简介 资料内容 仿真实现&#xff08;protues8.7&#xff09; 程序&#xff08;Keil5&#xff09; 全部内容 资料获取 具体实现功能 利用单片机8*8点阵实现贪吃蛇游戏的控制。 仿真演示视频&#xff1a; 51-基于51单片机的贪吃蛇游…

【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(二)

目录 1 -> HML语法 1.1 -> 页面结构 1.2 -> 数据绑定 1.3 -> 普通事件绑定 1.4 -> 冒泡事件绑定5 1.5 -> 捕获事件绑定5 1.6 -> 列表渲染 1.7 -> 条件渲染 1.8 -> 逻辑控制块 1.9 -> 模板引用 2 -> CSS语法 2.1 -> 尺寸单位 …