如何在Centos7中安装Kubernetes

news/2024/11/23 20:33:35/

一、概述

Kubernetes([kubə’netis]),简称K8s,是用8代替名字中间的8个字符“ubernete”而成的缩写,它是一个由Google 开源的全新的分布式容器集群管理系统。

二、准备

IP角色内存
192.168.1.130master4G
192.168.1.131node2G
192.168.1.132node2G

说明:上述Linux环境网络适配器均为NAT模式;Linux环境搭建请参考视频教程:https://www.bilibili.com/video/BV15m4y1d7ZP/?spm_id_from=333.999.0.0

三、安装

1、共性操作

该操作要求每个节点均需执行的相同操作,包括修改hosts、时间同步、禁用firewalld、禁用selinux、禁用swap、网桥设置和安装K8s等。

a、修改hosts

命令:

# cat >> /etc/hosts << EOF
192.168.1.130 master
192.168.1.131 node1
192.168.1.132 node2
EOF
# cat /etc/hosts

如果不修改hosts文件,则node节点报如下错误:

5月 18 14:27:23 localhost.localdomain kubelet[71288]: E0518 14:27:23.915453   71288 controller.go:187] failed to update lease, error: Operation cannot be fulfilled on leases.coordination.k8s.io "localhost.localdomain": the object has been modified; please apply your changes to the latest version and try again
b、时间同步
# systemctl start chronyd && systemctl enable chronyd
# date 
c、禁用firewalld
# systemctl stop firewalld && systemctl disable firewalld

如果不禁用firewalld,则出现如下警告:

[WARNING Firewalld]: firewalld is active, please ensure ports [6443 10250] are open or your cluster may not function correctly
d、禁用selinux
# setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
e、禁用swap

临时关闭, 重启失效:

# swapoff -a

永久关闭:

# swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

默认情况下,K8s为了追求高性能,不建议使用交换分区,为此它要求每个节点禁用swap,否则各个节点中的kubelet无法运行。

f、网桥设置
# cat > /etc/sysctl.d/kubernetes.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF# sysctl --system

g、docker安装

# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# yum makecache fast
# yum -y install docker-ce
# systemctl enable docker && systemctl start docker
# docker -v

注意:yum -y install docker只能安装docker-1.13.x老版本的docker,2017年后版本有了CE(社区版本)和EE(企业版本),所以新版本使用yum -y install docker-ce

设置daemon.json:

# mkdir -p /etc/docker
# tee /etc/docker/daemon.json <<-'EOF'
{"exec-opts": ["native.cgroupdriver=systemd"],"registry-mirrors": ["https://ha65u7j9.mirror.aliyuncs.com"]
}
EOF
# systemctl daemon-reload && systemctl restart docker

在某个节点(master节点或node节点)中运行cat /var/lib/kubelet/config.yaml |grep group命令可以看出kubelet默认 cgoup 驱动为systemd,而docker 默认驱动为 cgroupfs,但K8s官网要求docker 和 kubelet 服务中的 cgroup 驱动必须一致,为此设置daemon.json时添加了"exec-opts": [“native.cgroupdriver=systemd”]配置。

g、安装K8s

①、镜像:

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

②、安装:

# yum install -y kubeadm-1.23.17 kubectl-1.23.17 kubelet-1.23.17
# systemctl enable kubelet
# journalctl -xefu kubelet

说明:查看kubelet运行日志:

2、异性操作

K8s环境搭建过程中有些命令需要在不同角色的节点执行,异性操作罗列了不同角色计算机执行的命令

a、master

①、设置hostname:

# hostnamectl set-hostname master

②、初始化Kubernetes,保存该命令输出的一个join命令,该join命令需要在node角色的节点上执行

# kubeadm init \--apiserver-advertise-address=192.168.1.130 \--image-repository registry.aliyuncs.com/google_containers \--kubernetes-version v1.23.17 \--service-cidr=10.96.0.0/12 \--pod-network-cidr=10.244.0.0/16 \--ignore-preflight-errors=all

说明:

–apiserver-advertise-address #集群通告地址(master 机器IP)
–image-repository #由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址
–kubernetes-version #K8s版本,与上面安装的一致
–service-cidr #集群内部虚拟网络,Pod统一访问入口
–pod-network-cidr #Pod网络,与下面部署的CNI网络组件yaml中保持一致

③、环境配置

普通用户:

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

root用户:

# echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile
# source /etc/profile

如果不配置环境变量,则执行时提示如下错误:

# kubectl get node
The connection to the server localhost:8080 was refused - did you specify the right host or port?

④、配置flannel

flannel([ˈflænl])和calico([ˈkælɪkoʊ])都是用于k8s节点之间容器网络通信的一个k8s组件,flannel可以为不同node节点的分配不同的子网,实现容器间的跨机通信,从而实现整个kubenets层级通信。

— 下载:

# cd /opt
# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

— 上传:

# kubectl apply -f /opt/kube-flannel.yml
b、node

①、设置hostname:

# hostnamectl set-hostname noden

每个node节点都要执行上面命令,n的值和/etc/hosts 文件从节点相一致。

②、执行kubeadm join命令,该命令是master节点 初始化k8s时生成的

# kubeadm join 192.168.1.130:6443 --token 5hj7w9.kt3fnduortroodcd \--discovery-token-ca-cert-hash sha256:b6e461346caae2c96220ec38d5435d8863ded95383743105733615df74b0a496

注意:上面命令中token默认有效期为24小时,过期后可以在master节点执行kubeadm token create --print-join-command重新创建token

③、环境配置

# echo "export KUBECONFIG=/etc/kubernetes/kubelet.conf" >> /etc/profile
# source /etc/profile
3、节点状态
# kubectl get node
NAME     STATUS   ROLES                  AGE     VERSION
master   Ready    control-plane,master   9m9s    v1.23.17
node1    Ready    <none>                 2m29s   v1.23.17
node2    Ready    <none>                 2m10s   v1.23.17
4、问题解决

a、问题一

描述:执行kubectl get node命令时发现有些节点一致处于NotReady状态,在这些节点执行journalctl -xefu kubelet命令则提示如下错误:

5月 19 06:15:21 master kubelet[6469]: E0519 06:15:21.849698    6469 kubelet.go:2394] "Container runtime network not ready" networkReady="NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized"
5月 19 06:15:24 master kubelet[6469]: I0519 06:15:24.336305    6469 cni.go:240] "Unable to update cni config" err="no networks found in /etc/cni/net.d"

原因:故障节点没有自动生成/etc/cni/net.d/10-flannel.conflist。

方案:将正常节点上/etc/cni/net.d/10-flannel.conflist拷贝到故障节点对应目录。


http://www.ppmy.cn/news/75924.html

相关文章

股票配资交易系统【实盘】

股票配资系统建设&#xff0c;本文档主要针对实盘股票配资系统。 股票配资交易系统主要包含三部分&#xff1a;App客户端、交易程序服务端、管理后台 App客户端 app客户端是原生应用&#xff0c;非H5生成。客户端主要功能是承接用户的股票订单委托、查询、用户资金转入&#x…

FP独立站支付问题你还没解决?out了!

目前FP独立站是很多跨境卖家的变现方式&#xff0c;但是这类外贸电商会遇到一些收款问题&#xff0c;这些问题很容易就让卖家的资金被冻结、账号被风控、关联账号被限制&#xff0c;损失真是不小。那FP卖家的收款问题该怎么解决呢&#xff1f;往下看。 一、FP独立站常见收款方式…

Linux·深入理解IO复用技术之epoll

目录 1.写在前面 2.初识复用技术和IO复用 3. Linux的IO复用工具概览 4. 初识epoll 5. epoll的底层细节 6.LT模式和ET模式 7.epoll的惊群问题 1.写在前面 今天一起来学习一下高并发实现的的重要基础&#xff1a;I/O复用技术 & epoll原理。 通过本文你将了解到以下内容…

ChatGPT全球最大开源平替OpenAssistant:基于Pythia和LLaMA微调而来

论文地址&#xff1a;https://drive.google.com/file/d/10iR5hKwFqAKhL3umx8muOWSRm7hs5FqX/view 项目地址&#xff1a;https://github.com/LAION-AI/Open-Assistant 数据集地址&#xff1a;https://huggingface.co/datasets/OpenAssistant/oasst1 体验地址&#xff1a;http…

LCOV 工具来统计 Google Test 的代码覆盖率

要使用 LCOV 工具来统计 Google Test 的代码覆盖率&#xff0c;可以按照以下步骤进行操作&#xff1a; 1、安装 LCOV 工具&#xff1a;首先&#xff0c;确保你已经安装了 LCOV 工具。你可以通过在终端中运行以下命令来检查是否已安装&#xff1a; lcov --version 如果该命令能…

STM32F030C8T6最小系统板和流水灯(原理图和PCB)

STM32F030C8T6最小系统板和流水灯。 嵌入式课的课程设计&#xff0c;要做个流水灯&#xff0c;我就顺便画个最小系统板&#xff0c;开源出来了&#xff0c;各位大佬指点指点&#xff0c;有哪里需要优化改进的。 那个WS2812的RGB灯用错引脚了&#xff0c;所以没法用PWM来控制&…

野火STM32电机系列(三)Cubemx配置CAN通信

CAN接口: PI9 PB9 1.配置CAN 通信参数 由于F4的 CAN外设挂载在APB1上&#xff0c;时钟配置后APB1的时钟速率为42MHz&#xff0c;目标通信速率为1000KHz&#xff0c;由公式&#xff1a; BaudRate 1/NominalBitTime NominalBitTime 1tq tBS1 tBS2 设置参数如下&#xff1a;…

MongoDB聚合操作

文章目录 一、单一聚合二、聚合管道2.1 $match / $project / $count2.2 $limit / $skip / $sort2.3 $group 分组查询2.4 $unwind 展开数组2.5 $lookup 左外连接2.6 $bucket 存储桶 三、MapReduce 提示&#xff1a;以下是本篇文章正文内容&#xff0c;MongoDB 系列学习将会持续更…