当前位置: 首页 > article >正文

Kubernetes(一)

Kubernetes(简称K8s)是一个开源的容器编排平台,已经成为现代云原生应用的核心技术,主要应用于对容器化应用程序的自动化部署、扩展以及管理。k8s配备了一组核心组件以及一系列功能,这些组件能够实现容器的调度、负载均衡、服务发现以及故障恢复等功能。

文章目录

    • 环境初始化
    • 安装Docker
    • kubeadm部署k8s集群
    • Nginx服务部署

环境初始化

Kubernetes主要有三种部署方式,分别是kubeadm、minikube、二进制包。

  • Minikube:一种能够帮助用户迅速搭建起单节点Kubernetes环境的工具。
  • Kubeadm:一种可以帮助用户快速搭建Kubernetes集群的工具。
  • 二进制包:需要从官方网站下载各个组件的二进制包,然后按照一定顺序依次进行安装,这种方式可以更加深入理解Kubernetes的各个组件原理,但是实现较麻烦。

本文采用第二种方式进行部署,集群中三个节点的资源分配规划。

主机名角色IP系统CPU内存
k8s-mastermaster192.168.235.150Rocky Linux 9.52c4g/100g
k8s-node1node1192.168.235.151Rocky Linux 9.52c4g/100g
k8s-node2node2192.168.235.152Rocky Linux 9.52c4g/100g

分别在三个节点执行
master节点

hostnamectl hostname k8s-master

node1节点

hostnamectl hostname k8s-node1

node2节点

hostnamectl hostname k8s-node2

在全部节点添加ip地址与主机名的映射

vi /etc/hosts
192.168.235.150 k8s-master
192.168.235.151 k8s-node1
192.168.235.152 k8s-node2

在这里插入图片描述

关闭防火墙和selinux

分别在3个节点执行

systemctl stop firewalld.service 
systemctl disable firewalld.service
setenforce 0
sed -i 's#SELINUX=enforcing#SELINUX=disabled#' /etc/selinux/config

设置镜像源和epel源

分别在3个节点执行

sed -e 's|^mirrorlist=|#mirrorlist=|g' \
 -e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.aliyun.com/rockylinux|g' \
 -i.bak \
 /etc/yum.repos.d/rocky-*.repo
yum makecache
vi /etc/yum.repos.d/epel.repo
[epel]
name=Extra Packages for Enterprise Linux $releasever - $basearch
# It is much more secure to use the #metalink, but if you wish to use a local mirror
# place its address here.
baseurl=https://repo.huaweicloud.com/epel/$releasever/Everything/$basearch/
#metalink=https://mirrors.fedoraproject.org/#metalink?repo=epel-$releasever&arch=$basearch&infra=$infra&content=$contentdir
enabled=1
gpgcheck=1
countme=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-$releasever
 
[epel-debuginfo]
name=Extra Packages for Enterprise Linux $releasever - $basearch - Debug
# It is much more secure to use the #metalink, but if you wish to use a local mirror
# place its address here.
baseurl=https://repo.huaweicloud.com/epel/$releasever/Everything/$basearch/debug/
#metalink=https://mirrors.fedoraproject.org/#metalink?repo=epel-debug-$releasever&arch=$basearch&infra=$infra&content=$contentdir
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-$releasever
gpgcheck=1
 
[epel-source]
name=Extra Packages for Enterprise Linux $releasever - $basearch - Source
# It is much more secure to use the #metalink, but if you wish to use a local mirror
# place its address here.
baseurl=https://repo.huaweicloud.com/epel/$releasever/Everything/source/tree/
#metalink=https://mirrors.fedoraproject.org/#metalink?repo=epel-source-$releasever&arch=$basearch&infra=$infra&content=$contentdir
enabled=0

yum makecache

设置时区和时间

分别在3个节点执行

timedatectl
date

在这里插入图片描述

设置系统最大打开文件数

分别在3个节点执行

vi /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
* soft nofile 65535:所有用户的软限制设置为 65535 个文件描述符,每个用户在未提升权限的情况下,最多可以同时打开 65535 个文件或网络连接。
* hard nofile 65535:所有用户的硬限制设置为 65535 个文件描述符,在不修改配置文件的情况下,用户可以提升到的最大文件描述符数量。

设置内核参数

分别在3个节点执行

vi /etc/sysctl.conf
net.ipv4.tcp_syncookies = 1 
net.ipv4.tcp_max_tw_buckets = 20480 
net.ipv4.tcp_max_syn_backlog = 20480
net.core.netdev_max_backlog = 262144
net.ipv4.tcp_fin_timeout = 20
sysctl -p

关闭swap

分别在3个节点执行

swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab

安装性能分析工具

yum install -y gcc autoconf sysstat

开启bridge过滤

vim /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
modprobe br_netfilter && lsmod | grep br_netfilter
sysctl -p /etc/sysctl.d/k8s.conf

安装Docker

分别在3个节点执行

yum install -y yum-utils

配置阿里云镜像

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

查看可用的docker版本列表

yum list docker-ce.x86_64 --showduplicates | sort -r

下载指定的版本

yum -y install docker-ce-25.0.5-1.el9
vim /etc/docker/daemon.json

更换镜像源

{
  "registry-mirrors": ["https://docker.1panel.live","https://docker.rainbond.cc"]
}

下载安装cri-docker

分别在3个节点执行

wget -c https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.9/cri-dockerd-0.3.9.amd64.tgz

解压文件

tar -xvf cri-dockerd-0.3.9.amd64.tgz --strip-components=1 -C /usr/local/bin/

下载cri-docker.service与cri-docker.socker文件

wget -O /etc/systemd/system/cri-docker.service https://raw.githubusercontent.com/Mirantis/cri-dockerd/master/packaging/systemd/cri-docker.service
wget -O /etc/systemd/system/cri-docker.socket https://raw.githubusercontent.com/Mirantis/cri-dockerd/master/packaging/systemd/cri-docker.socket

如果下载不了,自己手动建这两个文件

cd /etc/systemd/system

新建cri-docker.service文件

vim cri-docker.service
[Unit]
Description=CRI Interface for Docker Application Container Engine
Documentation=https://docs.mirantis.com
After=network-online.target firewalld.service docker.service
Wants=network-online.target
Requires=cri-docker.socket

[Service]
Type=notify
ExecStart=/usr/local/bin/cri-dockerd --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9 --container-runtime-endpoint=unix:///var/run/cri-dockerd.sock --cri-dockerd-root-directory=/var/lib/dockershim --cri-dockerd-root-directory=/var/lib/docker
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always

StartLimitBurst=3

StartLimitInterval=60s

LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process

[Install]
WantedBy=multi-user.target

新建cri-docker.socket文件

vim cri-docker.socket
[Unit]
Description=CRI Docker Socket for the API
PartOf=cri-docker.service

[Socket]
ListenStream=/var/run/cri-dockerd.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker

[Install]
WantedBy=sockets.target

启动并设置开机自启动

systemctl daemon-reload
systemctl enable cri-docker.service --now

kubeadm部署k8s集群

分别在3个节点执行

设置k8s的仓库配置信息,将镜像源换成阿里云

vim /etc/yum.repos.d/k8s.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/repodata/repomd.xml.key

安装集群的组件kubelet kubeadm kubectl

yum install -y kubelet kubeadm kubectl
vim /etc/sysconfig/kubelet

添加Cgoup控制组信息

KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"

设置开机自启动

systemctl enable kubelet.service

初始化集群(只在master节点运行)

kubeadm config images list
kubeadm config print init-defaults > kubeadm-config.yaml
vi kubeadm-config.yaml

只需修改以下参数

 advertiseAddress: 192.168.235.150 #修改为主节点IP
 name: k8s-master  #修改为主节点的名称
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers #修改为阿里云镜像

使用配置文件初始化

kubeadm init --config kubeadm-config.yaml --upload-certs

初始化完成后根据提示信息执行以下代码

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

再根据提示加入其他node节点,在其他两个node节点上执行下面语句,注意需要在后面加上 --cri-socket /var/run/cri-dockerd.sock 参数,否则报错

kubeadm join 192.168.235.150:6443 --token abcdef.0123456789abcdef  --discovery-token-ca-cert-hash sha256:fedc160482922f0c5c4077121fb45ed13ca9e169f937628eda2cbfcbba99015e --cri-socket=unix:///var/run/cri-dockerd.sock

安装网络插件flannel

wget https://github.com/flannel-io/flannel/releases/download/v0.24.3/kube-flannel.yml
sed -i '/ image:/s#docker.io/flannel#registry.cn-hangzhou.aliyuncs.com/luoyuxin#' kube-flannel.yml

根据配置文件创建fiannel

kubectl create -f kube-flannel.yml

再查看/run/flannel是否有subnet.env,没有的话手动建一个

vim subnet.env
FLANNEL_NETWORK=10.10.0.0/16
FLANNEL_SUBNET=10.10.0.1/24
FLANNEL_MTU=1450
FLANNEL_IPMASQ=true

查看集群节点的状态,如果为Ready,说明集群已经部署成功。

kubectl get nodes -o wide

在这里插入图片描述

Nginx服务部署

在kubernetes集群中部署一个nginx应用,看集群是否正常工作。
部署nginx

kubectl create deployment nginx --image=nginx

暴露端口,提供对外访问的服务

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

查看pod和服务状态

kubectl get pods,service

在这里插入图片描述

可以看到service的80端口映射到主机的31948端口,所以在访问的时候需要通过主机的ip地址和端口进行访问,如果看到以下页面,说明集群正常运行。

在这里插入图片描述


http://www.kler.cn/a/524792.html

相关文章:

  • 计算机网络 IP 网络层 2 (重置版)
  • UE求职Demo开发日志#15 思路与任务梳理、找需要的资源
  • windows lm studio 0.3.8无法下载模型,更换镜像
  • ESP32 I2S音频总线学习笔记(二):I2S读取INMP441音频数据
  • MySQL--》深度解析InnoDB引擎的存储与事务机制
  • 函数与方法
  • HBuilderX构建Vue项目
  • Redis缓存穿透,雪崩,击穿
  • C26.【C++ Cont】动态内存管理和面向对象的方式实现链表
  • Vue.js `setup()` 函数的使用
  • Vuex中的getter和mutation有什么区别
  • 团体程序设计天梯赛-练习集——L1-025 正整数A+B
  • AttributeError: can‘t set attribute ‘lines‘
  • 【Proteus仿真】【51单片机】多功能计算器系统设计
  • 力扣题目【6. Z 字形变换】 Java题解
  • SQL UCASE() 函数详解
  • 将DeepSeek接入Word,打造AI办公助手
  • Spring AI 在微服务中的应用:支持分布式 AI 推理
  • RK3568使用opencv(使用摄像头捕获图像数据显示)
  • python-decouple和 django-environ管理 Python/Django 项目中的环境变量
  • Van-Nav:新年,将自己学习的项目地址统一整理搭建自己的私人导航站,供自己后续查阅使用,做技术的同学应该都有一个自己网站的梦想
  • deepseek本地部署
  • 算法每日双题精讲 —— 前缀和(【模板】一维前缀和,【模板】二维前缀和)
  • 线性调整器——耗能型调整器
  • 练习题 - Django 4.x Auth 身份验证使用示例和配置方法
  • HTB:Cicada[RE-WriteUP]