首页 > 其他分享 >K8S五节点集群部署

K8S五节点集群部署

时间:2024-10-28 13:49:36浏览次数:8  
标签:容器 Kubernetes 192.168 集群 master K8S com 节点

1.概念简介

Kubernetes 是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,方便进行声明式配置和自动化。Kubernetes 拥有一个庞大且快速增长的生态系统,其服务、支持和工具的使用范围广泛。

为什么需要 Kubernetes,它能做什么?

容器是打包和运行应用程序的好方式。在生产环境中, 你需要管理运行着应用程序的容器,并确保服务不会下线。 例如,如果一个容器发生故障,则你需要启动另一个容器。 如果此行为交由给系统处理,是不是会更容易一些?

这就是 Kubernetes 要来做的事情! Kubernetes 为你提供了一个可弹性运行分布式系统的框架。 Kubernetes 会满足你的扩展要求、故障转移你的应用、提供部署模式等。 例如,Kubernetes 可以轻松管理系统的 Canary (金丝雀) 部署。

Kubernetes 为你提供:

  • 服务发现和负载均衡

    Kubernetes 可以使用 DNS 名称或自己的 IP 地址来暴露容器。 如果进入容器的流量很大, Kubernetes 可以负载均衡并分配网络流量,从而使部署稳定。

  • 存储编排

    Kubernetes 允许你自动挂载你选择的存储系统,例如本地存储、公共云提供商等。

  • 自动部署和回滚

    你可以使用 Kubernetes 描述已部署容器的所需状态, 它可以以受控的速率将实际状态更改为期望状态。 例如,你可以自动化 Kubernetes 来为你的部署创建新容器, 删除现有容器并将它们的所有资源用于新容器。

  • 自动完成装箱计算

    你为 Kubernetes 提供许多节点组成的集群,在这个集群上运行容器化的任务。 你告诉 Kubernetes 每个容器需要多少 CPU 和内存 (RAM)。 Kubernetes 可以将这些容器按实际情况调度到你的节点上,以最佳方式利用你的资源。

  • 自我修复

    Kubernetes 将重新启动失败的容器、替换容器、杀死不响应用户定义的运行状况检查的容器, 并且在准备好服务之前不将其通告给客户端。

  • 密钥与配置管理

    Kubernetes 允许你存储和管理敏感信息,例如密码、OAuth 令牌和 SSH 密钥。 你可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置,也无需在堆栈配置中暴露密钥。

  • 批处理执行 除了服务外,Kubernetes 还可以管理你的批处理和 CI(持续集成)工作负载,如有需要,可以替换失败的容器。
  • 水平扩缩 使用简单的命令、用户界面或根据 CPU 使用率自动对你的应用进行扩缩。
  • IPv4/IPv6 双栈 为 Pod(容器组)和 Service(服务)分配 IPv4 和 IPv6 地址。
  • 为可扩展性设计 在不改变上游源代码的情况下为你的 Kubernetes 集群添加功能。

Kubernetes 文档icon-default.png?t=O83Ahttps://kubernetes.io/zh-cn/docs/concepts/

2.环境准备

使用CentOS 7,镜像CentOS-7-x86_64-DVD-2009.isoCentOS-7-x86_64-DVD-2009.iso镜像下载地址icon-default.png?t=O83Ahttps://mirrors.aliyun.com/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-2009.iso?spm=a2c6h.25603864.0.0.4a872d1cS4z0M6通过百度网盘分享的文件:资源包-k8s安装
链接:https://pan.baidu.com/s/1gbF_bWqHfoabpXPK93JZ_w?pwd=bona 
提取码:bona

需要部署1个master节点和4个node节点,总共5台虚拟机;网络自行选择桥接或NAT模式,能ping通百度就行;修改好主机名

主机名/hostnameip地址/IPADDR网关/GATEWAY
k8smaster192.168.10.10192.168.10.2
k8snode1192.168.10.11192.168.10.2
k8snode2192.168.10.12192.168.10.2
k8snode3192.168.10.13192.168.10.2
k8snode4192.168.10.14192.168.10.2

3.操作过程

        3.1.K8S安装前准备工作

                3.1.1.所有节点关闭防火墙firewalld和selinux,并清除iptables规则

# 关闭防火墙并且设置开机不自启
systemctl stop firewalld
systemctl disable firewalld

# 关闭selinux并且设置开机不自启
setenforce 0
vi /etc/selinux/config
enforcing  改成  disabled

# 清除iptables规则
iptables -F

                3.1.2.所有节点关闭交换分区,以提升性能(k8s1.8版本以上要求必须关闭)

# 临时关闭交换分区
swapoff -a

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

                3.1.3.所有节点修改/etc/hosts文件,配置了IP地址和主机名的映射关系

# 添加如下内容,保存退出
192.168.10.10 k8smaster
192.168.10.11 k8snode1
192.168.10.12 k8snode2
192.168.10.13 k8snode3
192.168.10.14 k8snode4

# 修改好之后,各节点互ping对应节点的hostname测试一下,能ping通就没问题
[root@k8smaster ~]# ping k8snode1 -c2
PING k8snode1 (192.168.10.11) 56(84) bytes of data.
64 bytes from k8snode1 (192.168.10.11): icmp_seq=1 ttl=64 time=0.744 ms
64 bytes from k8snode1 (192.168.10.11): icmp_seq=2 ttl=64 time=0.485 ms

--- k8snode1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.485/0.614/0.744/0.131 ms

                3.1.4.所有节点加载模块br_netfilter

br_netfilter模块可以使iptables规则可以在Linux Bridges上面工作,用于将桥接的流量转发至iptables链;如果没有加载br_netfilter模块,那么并不会影响不同node上的pod之间的通信,但是会影响同node内的pod之间通过service来通信

# 临时加载模块br_netfilter
modprobe br_netfilter

# 永久加载模块br_netfilter,在/etc/modules-load.d/k8s.conf文件中写入模块名字br_netfilter
cat >> /etc/hosts << EOF
> br_netfilter
> EOF

# 重启systemd-modules-load.service服务
# systemd-modules-load.service是systemd提供的一个开机自启动服务,用于在系统启动时根据静态的配置文件或者内核启动参数加载内核模块
systemctl restart systemd-modules-load.service

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

cat >> /etc/sysctl.conf << EOF
> 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

                3.1.6.所有节点配置时间同步服务

# 修改/etc/chrony.conf配置文件,如下图
# 这一步使设置时基服务器同步的远端授时中心。这里我们使用ntp.aliyun.com作为远端授时中心
vim /etc/chrony.conf

# 重启时间同步服务并且设置开机自启
systemctl start chronyd
systemctl enable chronyd

# 查看时间
date

                3.1.7.所有节点安装docker,步骤参考阿里云镜像站教程

Docker CE配置方法,CentOS 7(使用 yum 进行安装)icon-default.png?t=O83Ahttps://developer.aliyun.com/mirror/docker-ce?spm=a2c6h.13651102.0.0.44ac1b11L6abXg

# Step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# Step 3
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo

# Step 4: 更新并安装Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce

# Step 4: 开启Docker服务
sudo service docker start

        3.2.K8S安装

                3.2.1.所有节点安装k8s,步骤参考阿里云镜像站教程

Kubernetes配置方法icon-default.png?t=O83Ahttps://developer.aliyun.com/mirror/kubernetes?spm=a2c6h.13651102.0.0.44ac1b11L6abXg

# 配置k8s的yum源
cat <<EOF | tee /etc/yum.repos.d/kubernetes.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
EOF

# 安装kubelet、kubeadm、kubectl
yum install -y kubelet kubeadm kubectl

# 启动kubelet并且设置开机自启
systemctl enable kubelet && systemctl start kubelet

                        3.2.2.所有节点配置docker镜像加速器,华为云有教程

华为云官网icon-default.png?t=O83Ahttps://www.huaweicloud.com/

                        3.2.3.所有节点安装CoreDNS容器,CoreDNS是Kubernetes 集群中的默认 DNS 服务,用于解析 Pod 的 DNS 记录

# 拉取镜像
docker pull coredns/coredns:1.8.4
# 给镜像打tag
docker tag coredns/coredns:1.8.4 registry.aliyuncs.com/google_containers/coredns:v1.8.4

我们上一步配置了华为云的镜像加速器,所以这步正常来说应该是能正常拉取镜像的,如果拉取失败,就换阿里云的镜像加速器,步骤差不多

阿里云官网icon-default.png?t=O83Ahttps://www.aliyun.com/

如果还是拉取失败,就喝杯茶休息一下吧...过一会儿再试试,说不定就行了...

                3.2.4.master节点初始化

kubeadm init \
--apiserver-advertise-address=192.168.10.10 \
--image-repository registry.aliyuncs.com/google_containers \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16

# –apiserver-advertise-address # 集群通告地址,填写master节点ip
# –image-repository # 由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址
# –kubernetes-version #K8s版本,与上面安装的一致
# –service-cidr #集群内部虚拟网络,Pod统一访问入口,可以不用更改,直接用上面的参数
# –pod-network-cidr #Pod网络,与下面部署的CNI网络组件yaml中保持一致,可以不用更改,直接用上面的参数

输出内容建议保存,红框出来的是之后node节点加入集群的命令

kubeadm join 192.168.10.10:6443 --token 91rgh7.fao3v8j30tbcr1el \
	--discovery-token-ca-cert-hash sha256:35e9d72195a98a51571fe313aedd865b735f39fd3a4276d89faae0bf4c8aac89

                3.2.5.master节点配置相应参数

# 创建$HOME/.kube目录,-p是递归创建目录
mkdir -p $HOME/.kube
 
# 将 Kubernetes 集群的管理员配置文件复制到 $HOME/.kube/config,以便 kubectl 命令可以使用它来连接到集群
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
 
# 将 $HOME/.kube/config 文件的所有者和所属组修改为当前用户和当前用户的主要组,这样当前用户就有权限读取和修改这个配置文件了
chown $(id -u):$(id -g) $HOME/.kube/config

                3.2.6.master节点k8s配置安装flannel网络

# 下载kube-flannel.yml,下不了的我上面的链接里有
wget https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

# 修改kube-flannel.yml文件内容,找到如下位置
# 修改Network这行的内容,要与执行kubeadm init(master节点初始化)输入的网段一致
net-conf.json: |
  {
    "Network": "10.244.0.0/16",
    "Backend"": {
      "Type": "vxlan"
  }
}

vi/vim快速查找方法如下,红框框起来了

# k8s安装flannel网络
kubectl apply -f kube-flannel.yml

# 安装完成后,查看flannel pod状态
kubectl get pod --all-namespaces

                3.2.7.将node节点加入集群(node节点操作)

# 在k8snode1、k8snode2、k8snode3、k8snode4节点都输入以下命令
# 注意这里要改成自己的,master节点初始化的输出内容
kubeadm join 192.168.10.10:6443 --token 91rgh7.fao3v8j30tbcr1el \
	--discovery-token-ca-cert-hash sha256:35e9d72195a98a51571fe313aedd865b735f39fd3a4276d89faae0bf4c8aac89

# 查看集群节点状态(master节点执行)
kubectl get nodes
# 输出如下
NAME        STATUS   ROLES                  AGE   VERSION
k8smaster   Ready    control-plane,master   21h   v1.23.6
k8snode1    Ready    <none>                 20h   v1.23.6
k8snode2    Ready    <none>                 20h   v1.23.6
k8snode3    Ready    <none>                 20h   v1.23.6
k8snode4    Ready    <none>                 20h   v1.23.6

默认的join token有效期限为24小时,过期后该token就不能用了,这时需要重新创建token,创建新的join token需要在master节点上操作,命令如下:

 kubeadm token create --print-join-command

        3.3.安装其他组件

                3.3.1.master节点配置k8s命令tab补全(可选)

正常安装了k8s后,使用kubec工具后接的命令是不能直接tab补全的,为了之后使用方便,建议配置一下

# 命令补全方法
yum -y install bash-completion
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
bash

                3.3.2.master节点部署Kuboard

Kuboard是一个Kubernetes可视化管理平台,它提供了一种简单易用的方式来管理和监控 Kubernetes集群。通过 Kuboard,用户可以轻松地部署、扩展和管理容器化应用程序,同时它还提供了一些高级功能,比如集群监控、日志管理、资源管理等。

kubectl apply -f https://addons.kuboard.cn/kuboard/kuboard-v3.yaml

安装完成后,浏览器访问http://192.168.10.10:30080/,这里的ip填master节点ip,默认账号admin,密码Kuboard123

标签:容器,Kubernetes,192.168,集群,master,K8S,com,节点
From: https://blog.csdn.net/XBona/article/details/143275889

相关文章

  • 在K8S中,什么是容器资源监视?
    容器资源监视是指在Kubernetes(K8s)环境中,对运行中的容器及其所在节点的资源使用情况进行实时监控和分析。以下是关于容器资源监视的详细解释:定义与重要性:容器资源监视是Kubernetes集群管理中不可或缺的一部分,它帮助管理员了解集群内各个组件的资源消耗情况,包括CPU、内存、存储......
  • 在K8S中,什么是联合集群?
    在Kubernetes(K8S)中,联合集群(FederatedCluster)是指将多个独立的Kubernetes集群连接起来,使它们能够共享资源和工作负载。这种配置带来了多种优势,包括提高可扩展性、高可用性和故障转移能力。以下是对联合集群的详细解释:1.定义与目的定义:联合集群是一种将多个Kubernetes集群联合......
  • 在K8S中,可以采取的最佳安全措施是什么?
    在Kubernetes(K8s)中,为了确保集群的安全性,可以采取一系列最佳安全措施。以下是一些关键的最佳实践:网络安全网络策略:定义Pod间的网络通信规则,控制进出Pod的流量,以减少潜在的攻击面。防火墙与访问控制:配置节点防火墙限制对集群节点不必要的外部访问,仅允许来自受信任来源的必要服......
  • 在K8S中,副本集和复制控制器之间有什么区别?
    在Kubernetes(K8S)中,副本集(ReplicaSet)和复制控制器(ReplicationController,简称RC)是用于确保指定数量的Pod副本在任何时间都处于运行状态的两种重要组件。尽管它们的目标相似,但在功能和使用场景上存在显著差异。以下是对这两种组件的详细比较:1.基本概念与用途复制控制器(Replicati......
  • 在K8S中,假设一家基于整体架构的公司处理许多产品。现在,随着公司在当今规模化行业中的
    在Kubernetes(K8S)的语境下,当一家基于整体架构的公司处理许多产品,并随着业务的发展,整体架构开始引起问题时,转向微服务架构并使用容器化部署是一个自然而然的解决方案。以下是对这一转变过程的详细分析:1.整体架构的问题可扩展性受限:整体架构通常意味着所有服务都紧密集成在一起,这......
  • kubeadm⽅式部署k8s集群
    准备环境三台机器,所有机器相互做解析centos7.6关闭防⽕墙和selinux关闭交换空间临时关闭:swapoff-a永久关闭:vi/etc/fstab找到如下内容:注释或删除#/dev/sdXnoneswapsw00[root@localhost/]#swapoff-a修改/etc/fstab文件,注释掉SWAP的自动挂载,使用free-m确......
  • k8s 进入pod network namespace
    6种namespaceNamespace弊端最主要的问题就是隔离得不彻底。首先,多个容器之间共享内核。其次,有很多资源是不能被Namespace化的,例如时间。NetworkNamespace进入Docker的networknamespacedocker把所有容器的NetworkNamespace放在/run/docker/netns目录下。dockerrun--rm......
  • k8s 集群 master的节点ip 改变了重新的 init
    1、修改hosts的配置 10.136.195.44master10.136.195.150node1最好重新的启动虚拟机。2、清理上次生成的初始化文件rm-rf/etc/kubernetes/*rm-rf~/.kube/*rm-rf/var/lib/etcd/* 3、关闭端口占用的进程[init]UsingKubernetesversion:v1.23.6[preflight]Ru......
  • DHorse v1.6.0 发布,基于 k8s 的发布平台
    版本说明新增特性支持Codeup(阿里云云效)代码仓库;支持环境的自动部署;优化特性管理员角色部署环境部需要审批;优化页面展示;升级指南升级指南DHorse介绍DHorse是一个轻量级、简单易用的云应用管理平台,具有多云和多环境管理、应用管理和部署、服务治理等功能,使用该平台不......
  • K8s节点频繁NotReady
    K8s节点频繁NotReady查看平台告警相关日志监控网络系统层面进程调整超时时间探测脚本查看平台告警相关日志describenode关键字:OOM、etcd关键字:newelapiserver关键字:etcdserver:noleadermessage关键字:updatenodestatuskubelet关键字:metallb关键......