一文学会K8s集群搭建

news2024/12/24 8:52:47

环境准备

  • 节点数量:2台虚拟机 centos7
  • 硬件配置:master节点内存至少3G(2G后面在master节点初始化集群时会报错,内存不够),node节点可以2G,CPU至少2个,硬盘至少30G
  • 网络要求:多个节点之间网络互通,每个节点能访问外网

集群规划

这两个名称是准备设置的主机名称

  • k8s-master
  • k8s-node1

设置主机名

hostnamectl set-hostname k8s-master
hostnamectl set-hostname k8s-node1
# 查看主机名
hostname

同步host文件

如果DNS不支持主机名称解析,还需要在每台机器的/etc/hosts文件添加主机名和ip的对应关系。所有机器都要同步。我自己只搞了2台虚拟机做集群。

cat >> /etc/hosts <<EOF
192.168.35.133 k8s-master
192.168.35.132 k8s-node1
EOF

关闭防火墙

所有机器都要关闭

systemctl stop firewalld && systemctl disable firewalld

关闭SELINUX

setenforce 0 && sed -i 's/SELINUX=enforcing/SELINUX=disable/g' /etc/selinux/config

关闭swap分区

每一台机器都要关闭。为什么要关?自己百度去

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

同步时间

yum install ntpdate -y
ntpdate ntp1.aliyun.com;hwclock --systohc

安装containerd

每台机器都要安装

# 安装yum-config-manger依赖
yum install -y yum-utils device-mapper-persistent-data lvm2

# 添加containerd yum源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 安装containerd
yum install -y containerd.io cri-tools

# 配置containerd
cat > /etc/containerd/config.toml <<EOF
disabled_plugins = ["restart"]
[plugins.linux]
shim_debug = true
[plugins.cri.registry.mirrors."docker.io"]
endpoint = ["https://frz7i079.mirror.aliyuncs.com"]
[plugins.cri]
sandbox_image="registry.aliyuncs.com/google_containers/pause:3.2"
EOF

# 启动containerd服务 并设置开机启动
systemctl enable containerd && systemctl start containerd && systemctl status containerd

# 配置 containerd 配置
cat > /etc/modules-load.d/containerd.conf << EOF
overlay
br_netfilter
EOF

# 配置k8s网络配置
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF

# 加载overlay br_netfilter模块
modprobe overlay
modprobe br_netfilter

# 查看当前配置是否生效
sysctl -p /etc/sysctl.d/k8s.conf

添加源

每台机器都安装。你的cpu是x86的就选择x86的,反之选择arm的。

# 查看源
yum repolist

添加x86的源

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

# 移动并修改
mv kubernetes.repo /etc/yum.repos.d

添加arm的源

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

# 移动并修改
mv kubernetes.repo /etc/yum.repos.d

安装K8s

每台机器都要安装。

# 安装最新版本
yum install -y kubelet kubeadm kubectl

# 指定版本安装
yum install -y kubelet-1.26.0 kubeadm-1.26.0 kubectl-1.26.0

# 启动kubelet
sudo systemctl enable kubelet && sudo systemctl start kubelet && systemctl status kubelet

初始化集群

只需要在master节点上初始化即可。

kubeadm init \
--apiserver-advertise-address=192.168.35.133 \
--image-repository registry.aliyuncs.com/google_containers \
--pod-network-cidr=10.244.0.0/16
  • --apiserver-advertise-address:master节点的IP地址
  • --image-repository:选择用于拉取控制平面镜像的容器仓库,默认的太慢了,换成阿里云的
  • --pod-network-cidr:指明pod网络可以使用的IP地址段。设置后控制平面将会为每一个节点自动分派CIDRs

K8s集群搭建

# master节点执行
mkdir -p $HOME/.kube

# master节点执行
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

# master节点执行
sudo chown $(id -u):$(id -g) $HOME/.kube/config

node加入集群

# 所有node节点执行
kubeadm join 192.168.35.133:6443 --token bzotcq.9uev0sf5a19pgilp \
--discovery-token-ca-cert-hash sha256:98183ddb45ca9f9ee224c3a77fac6b524d2bf1dd31f911f5d023639f80abd43f

K8s集群搭建

master检查是否加入集群成功

kubectl get nodes

K8s集群搭建

解决节点NotReady状态

虽然集群搭建起来,但是不可用,需用通过网络插件解决该问题 https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml 在master节点创建kube-flannel.yml,输入下面内容

vi kube-flannel.yml

---
kind: Namespace
apiVersion: v1
metadata:
  name: kube-flannel
  labels:
    k8s-app: flannel
    pod-security.kubernetes.io/enforce: privileged
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  labels:
    k8s-app: flannel
  name: flannel
rules:
- apiGroups:
  - ""
  resources:
  - pods
  verbs:
  - get
- apiGroups:
  - ""
  resources:
  - nodes
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - ""
  resources:
  - nodes/status
  verbs:
  - patch
- apiGroups:
  - networking.k8s.io
  resources:
  - clustercidrs
  verbs:
  - list
  - watch
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  labels:
    k8s-app: flannel
  name: flannel
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: flannel
subjects:
- kind: ServiceAccount
  name: flannel
  namespace: kube-flannel
---
apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    k8s-app: flannel
  name: flannel
  namespace: kube-flannel
---
kind: ConfigMap
apiVersion: v1
metadata:
  name: kube-flannel-cfg
  namespace: kube-flannel
  labels:
    tier: node
    k8s-app: flannel
    app: flannel
data:
  cni-conf.json: |
    {
      "name": "cbr0",
      "cniVersion": "0.3.1",
      "plugins": [
        {
          "type": "flannel",
          "delegate": {
            "hairpinMode": true,
            "isDefaultGateway": true
          }
        },
        {
          "type": "portmap",
          "capabilities": {
            "portMappings": true
          }
        }
      ]
    }
  net-conf.json: |
    {
      "Network": "10.244.0.0/16",
      "Backend": {
        "Type": "vxlan"
      }
    }
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: kube-flannel-ds
  namespace: kube-flannel
  labels:
    tier: node
    app: flannel
    k8s-app: flannel
spec:
  selector:
    matchLabels:
      app: flannel
  template:
    metadata:
      labels:
        tier: node
        app: flannel
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: kubernetes.io/os
                operator: In
                values:
                - linux
      hostNetwork: true
      priorityClassName: system-node-critical
      tolerations:
      - operator: Exists
        effect: NoSchedule
      serviceAccountName: flannel
      initContainers:
      - name: install-cni-plugin
        image: docker.io/flannel/flannel-cni-plugin:v1.1.2
       #image: docker.io/rancher/mirrored-flannelcni-flannel-cni-plugin:v1.1.2
        command:
        - cp
        args:
        - -f
        - /flannel
        - /opt/cni/bin/flannel
        volumeMounts:
        - name: cni-plugin
          mountPath: /opt/cni/bin
      - name: install-cni
        image: docker.io/flannel/flannel:v0.22.0
       #image: docker.io/rancher/mirrored-flannelcni-flannel:v0.22.0
        command:
        - cp
        args:
        - -f
        - /etc/kube-flannel/cni-conf.json
        - /etc/cni/net.d/10-flannel.conflist
        volumeMounts:
        - name: cni
          mountPath: /etc/cni/net.d
        - name: flannel-cfg
          mountPath: /etc/kube-flannel/
      containers:
      - name: kube-flannel
        image: docker.io/flannel/flannel:v0.22.0
       #image: docker.io/rancher/mirrored-flannelcni-flannel:v0.22.0
        command:
        - /opt/bin/flanneld
        args:
        - --ip-masq
        - --kube-subnet-mgr
        resources:
          requests:
            cpu: "100m"
            memory: "50Mi"
        securityContext:
          privileged: false
          capabilities:
            add: ["NET_ADMIN", "NET_RAW"]
        env:
        - name: POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - name: POD_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        - name: EVENT_QUEUE_DEPTH
          value: "5000"
        volumeMounts:
        - name: run
          mountPath: /run/flannel
        - name: flannel-cfg
          mountPath: /etc/kube-flannel/
        - name: xtables-lock
          mountPath: /run/xtables.lock
      volumes:
      - name: run
        hostPath:
          path: /run/flannel
      - name: cni-plugin
        hostPath:
          path: /opt/cni/bin
      - name: cni
        hostPath:
          path: /etc/cni/net.d
      - name: flannel-cfg
        configMap:
          name: kube-flannel-cfg
      - name: xtables-lock
        hostPath:
          path: /run/xtables.lock
          type: FileOrCreate
kubectl apply -f kube-flannel.yml
 

K8s集群搭建

如果node节点还是NotReady状态,可尝试重启服务,等待几分钟再次查询

# 重启kubelet
sudo systemctl restart kubelet

K8s集群搭建

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

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

相关文章

双向圆周阵列及阵列间距调整

SOLIDWORKS提供的阵列功能是非常实用的快速建模功能&#xff0c;可以帮助我们快速的形成重复特征。在以往的版本中&#xff0c;无论是线性阵列还是其他阵列都提供了可以双向进行的阵列选项。也就是可以帮助我们保证两个方向的阵列属性。 今天我们要讲的是在圆周阵列中增加双向的…

【EPLAN】统一修改项目中字体大小

需求&#xff1a;当A3图框时&#xff0c;“设备标识符”等字体太小&#xff0c;影响查看图纸。需要统一调大。 通过“层管理”改变字体大小。 “项目数据”->“层管理” 找到需要改变字体的大小如“设备标识符”&#xff1a; Over。 效果&#xff08;2.5mm 调整到了 3.5mm&a…

我国元宇宙专利申请位列全球靠前,UTONMOS元宇宙游戏体验再升级

中青网报道 近日&#xff0c;2023年服贸会数字贸易发展趋势和前沿高峰论坛举办并发布了《中国元宇宙产业发展趋势洞察》报告。报告指出我国元宇宙相关专利申请量位列全球第二。 元宇宙是虚拟世界和现实世界融合的载体&#xff0c;正成为驱动数字经济发展和助力数字中国建设的重…

【python基础知识】0.print()函数

文章目录 前言print()函数无引号单引号的用法双引号的用法三引号的用法转义字符 变量和赋值变量的命名规范 下关预告 前言 Python就是一个能够帮你实现需求的工具&#xff0c;它更像是一把万能钥匙&#xff0c;决定用它来打开哪一扇门的&#xff0c;是你自己。 『千里之行&am…

2.1 PE结构:文件映射进内存

PE结构是Windows系统下最常用的可执行文件格式&#xff0c;理解PE文件格式不仅可以理解操作系统的加载流程&#xff0c;还可以更好的理解操作系统对进程和内存相关的管理知识&#xff0c;在任何一款操作系统中&#xff0c;可执行程序在被装入内存之前都是以文件的形式存放在磁盘…

阿里云2核4G服务器5M带宽五年租用价格表

阿里云2核4G服务器5M带宽可以选择轻量应用服务器或云服务器ECS&#xff0c;轻量2核4G4M带宽服务器297元一年&#xff0c;2核4G云服务器ECS可以选择计算型c7、c6或通用算力型u1实例等&#xff0c;买5年可以享受3折优惠&#xff0c;阿腾云分享阿里云服务器2核4G5M带宽五年费用表&…

Java“牵手”阿里巴巴店铺所有商品API接口数据,通过店铺ID获取整店商品详情数据,阿里巴巴店铺所有商品API申请指南

阿里巴巴平台店铺所有商品数据接口是开放平台提供的一种API接口&#xff0c;通过调用API接口&#xff0c;开发者可以获取阿里巴巴整店的商品的标题、价格、库存、月销量、总销量、库存、详情描述、图片、价格信息等详细信息 。 获取店铺所有商品接口API是一种用于获取电商平台…

了解被测系统(一)技术架构

目录 web应用组成 项目实例 系统架构图 整体架构图 web应用组成 从开发者的角度来看&#xff0c;web 应用主要由三部分组成: 用户界面&#xff0c;业务逻辑&#xff0c;数据。 1.用户界面(视图层) 用于将数据展示给用户的地方&#xff0c;采用 HTML&#xff0c;CSS&…

【Linux内核】以共享内存的方式实现进程间通信

现在有很多进程间通信的模式&#xff0c;但是我们选择一个简单的IPC机制&#xff08;共享内存&#xff09;来实现&#xff0c;并让它工作起来。 简单来讲我们实现了两个系统调用&#xff08;不可避免地需要我们完善IDT&#xff09;&#xff0c;发送方查看接受方是否接收&#…

配电室智能运维解决方案

配电智能运维服务是以电易云-智慧电力物联网平台为核心&#xff0c;通过对配电室(或箱变)、高、低压配电柜加装在线监测装置&#xff0c;将运行状态实时传输到电易云平台&#xff0c;人工24小时运维值班&#xff0c;为客户提供大数据时代下的电力运维解决方案&#xff0c;更好的…

基于springboot绩效管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

2.5 PE结构:导入表详细解析

导入表&#xff08;Import Table&#xff09;是Windows可执行文件中的一部分&#xff0c;它记录了程序所需调用的外部函数&#xff08;或API&#xff09;的名称&#xff0c;以及这些函数在哪些动态链接库&#xff08;DLL&#xff09;中可以找到。在Win32编程中我们会经常用到导…

修改 gc2093.c 驱动程序改变摄像头预览的镜像效果

原理 查看gc2093芯片手册&#xff0c;修改寄存器0x0017的数值&#xff0c;可以修改摄像头预览镜像效果。如下&#xff1a; #define GC2093_MIRROR_FLIP_REG 0x0017 #define MIRROR_MASK BIT(0) #define FLIP_MASK BIT(1) 方法 通过修改 gc2093.c 驱动程序可以改变摄像头预览…

NET7快速开发一个商品管理模块-商品列表开发(一)

商品管理模块&#xff0c;一般包含以下几个模块&#xff1a; 商品列表&#xff1a;这里可以看到所有已发布的商品信息列表。 商品管理&#xff1a;添加商品、编辑商品以及删除商品。 具体功能如下图&#xff1a; 1.商品列表 2.添加商品 3.商品SKU编辑

【java】【项目实战】[外卖十]项目优化(mysql读写分离)

目录 一、问题说明 二、读写分离示例 三、Mysql主从复制 3.1 介绍 3.2 配置 3.2.1 前置条件 3.2.2 配置-主库Master 3.2.2.1 第一步 3.2.2.2 第二步 3.2.2.3 第三步 3.2.2.4 第四步 3.2.3 配置-从库Slave 3.2.3.1 第一步 3.2.3.2 第二步 3.2.3.3 第三步 3.2.3.4 …

【TypeScript学习】—编译选项(三)

【TypeScript学习】—编译选项&#xff08;三&#xff09; 一、自动编译文件 tsc xxx.ts -w二、自动编译整个项目 三、编译器选项

3. C++调试时显示代码所在文件 / 函数 / 行号信息

1. 说明 在执行C代码时&#xff0c;有时希望知道当前代码所在的文件名、函数名和对应行号位置信息&#xff0c;方便快速定位到代码所在处。想要获取这些信息&#xff0c;可以使用C提供的一些宏进行获取。 2. 简单说明 __FILE__ : 用于获取当前语句所在源文件的文件名 ——fu…

从本地到Gitee:一步步学习文件上传及解决常见报错问题

&#x1f642;博主&#xff1a;小猫娃来啦 &#x1f642;文章核心&#xff1a;一步步学习文件上传及解决常见报错问题 文章目录 安装git进入gitee官网&#xff0c;登录账号新建仓库先打开git命令行上传本地资源到仓库第一步&#xff1a;git init第二步&#xff1a;git add .第三…

正版软件|Splashtop Personal 个人版桌面和移动远程控制软件

Splashtop Personal 个人版 - 从平板电脑、智能手机或另一台计算机轻松远程访问 Mac 或 Windows PC 最多可达 5 台设备。在本地网络上免费使用 Splashtop Personal *即可从舒适的沙发或卧室访问家用计算机。 通过订阅 Anywhere Access Pack&#xff0c;可以从 Internet 上的任何…

JLink和ST-Link接口引脚介绍

STM32F1系列&#xff0c;STM8S系列&#xff0c;PY32F003系列都用过好久了&#xff0c;但是对JLink和ST-Link下载器认识&#xff0c;还是很肤浅的。有时候&#xff0c;需要自己接线&#xff0c;却不知道引脚定义&#xff0c;特整理如下&#xff1a; 1、ST-Link ST-Link适合对象…