K8s: 裸机初始化Kubernetes集群环境

环境准备

  • 这里要先准备 linux 环境,提供一下几种方案
  • 1 )在云产品上购买一台裸机
  • 2 )选择一台刚安装好的 linux 服务器
  • 3 )选择虚拟机安装 linux
  • 这里,我选择linux的环境为 centos

在安装了 centos 的裸机上进行搭建


1 )在所有节点上禁用 selinux

  • 查看 selinux 状态: $ getenforce
  • 修改 /etc/selinux/config 文件,将 SELINUX=enforcing改为SELINUX=disabled
  • 重启 $ shutdown -r now 或 $ init 6 或 $ reboot

2 ) 关闭 Firewalld 防火墙

  • 查看防火墙状态: $ systemctl status firewalld
  • 关闭防火墙: $ systemctl stop firewalld
  • 开机禁用防火墙: $ systemctl disable firewalld

3 )关闭 swap

  • 临时关闭:$ sudo swapoff -a
  • 永久关闭:$ sudo sed -ri 's/.*swap.*/#&/' /etc/fstab (选择这个)

4 )同步时间

  • 4.1 )centos 8 之前可以使用 ntpdate
  • 安装软件: $ sudo yum -y install ntpdate
  • 同步: $ ntpdate 0.asia.pool.ntp.org
  • 注意:之后版本,上述不能使用,使用
  • 4.2 )较新版本的 centos 采用如下方案
  • 检查当前时间设置:$ timedatectl status
  • 更改时区:$ timedatectl set-timezone Asia/Shanghai 这时候基本可以了
  • 使系统时间自动与网络时间服务器同步:$ timedatectl set-ntp true

5 )配置hostname

  • 查看hostname: $ hostname
  • 为节点配置hostname: $ hostnamectl set-hostname master (推荐)
  • 永久修改方式: $ vi /etc/hostname 配置ip 和 域名,比如:k8s.master 这个需要重启
  • 配置完成后,执行第一个进行验证
  • 注意,上面配置的是 主节点,工作节点也类似配置

6 )为所有节点添加配置 hosts

  • $ vi /etc/hosts
    11.11.11.11 master
    22.22.22.22 node1
    33.33.33.33 node2
    
  • 注意:集群内的所有主机都要配置
  • 之后相互 ping 一下,比如 在 master 上执行 ping node1
  • 上面ip使用你真实的ip地址
  • 11 代表 master, 22 代表 node1, 33 代表node2 这里是模拟(假设的ip)

7 )为所有节点进行安装

  • 目前可用的 k8s版本在 1.29,每个版本配置不一样,最新版本基于 containerd.io 的, 删除了docker运行时

  • 也可以使用 docker 的运行时,但配置比较麻烦,所以,我们使用 1.22.4版本,这是一个简单的版本

  • 除了配置有些不一样,用法都基本一样

  • 开始配置 k8s 安装源

    # 添加 k8s 安装源
    cat <<EOF > /etc/yum.repos.d/kubernetes.repo
    [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
    
    • 如遇到权限问题,换种方式, 自行处理,
    • 如 $ sudo vi /etc/yum.repos.d/kubernetes.repo
      [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
      
  • 配置 Docker 安装源

    # 添加 Docker 安装源
    sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    
    • 如果没有 命令,执行 $ yum -y install yum-utils
    • 备注:集群内所有节点均执行
  • 删除之前服务器上的一些 相关软件,(裸机的话,不用执行)

    yum remove docker-ce docker-ce-cli containerd.io -y
    
    • 备注:所有节点均执行
  • 开始正式安装

    sudo yum install -y kubelet-1.22.4 kubectl-1.22.4 kubeadm-1.22.4 docker-ce docker-ce-cli containerd.io
    
    • 这里没有指定 docker-ce, docker-ce-cli, containerd.io 的版本,安装最新版
  • 注意

    • 主节点需要组件
      • docker(也可以是其他容器运行时)
      • kubectl 集群命令行交互工具
      • kubeadm 集群初始化工具
    • 工作节点需要组件
      • docker(也可以是其他容器运行时)
      • kubelet 管理 Pod 和容器,确保他们健康稳定运行。
      • kube-proxy 网络代理,负责网络相关的工作
    • 所有节点均可执行上述安装命令,不需要特别区分
  • 如果是最新版本,还需要配置 cri-dockerdcontainerd, 这里不做演示

  • 启动 kubelet、docker,并设置开机启动

    sudo systemctl enable kubelet
    sudo systemctl start kubelet
    sudo systemctl enable docker
    sudo systemctl start docker
    
  • 修改 docker 配置

    # kubernetes 官方推荐 docker 等使用 systemd 作为 cgroupdriver,否则 kubelet 启动不了
    cat <<EOF > /etc/docker/daemon.json
    {"exec-opts": ["native.cgroupdriver=systemd"],"registry-mirrors": ["https://hub-mirror.c.163.com", "https://mirror.baidubce.com", "https://docker.mirrors.ustc.edu.cn"]
    }
    EOF
    
    • 如果有权限问题,这样执行
      sudo sh -c 'echo -e "{\n\t\"exec-opts\": [\"native.cgroupdriver=systemd\"],\n\t\"registry-mirrors\": [\"https://hub-mirror.c.163.com\", \"https://mirror.baidubce.com\", \"https://docker.mirrors.ustc.edu.cn\"]\n}" > /etc/docker/daemon.json'
      
  • 重启生效

    sudo systemctl daemon-reload
    sudo systemctl restart docker
    
    • 注意:所有节点执行
  • 在 master 节点上执行,创建集群

    sudo kubeadm init --image-repository=registry.aliyuncs.com/google_containers
    
    • 在这执行完成后,会再 log 日志中 提示你 一个 加入集群的命令
    • 这个命令在其他节点上执行, 类似于如下
      Your Kubernetes control-plane has initialized successfully!To start using your cluster, you need to run the following as a regular user:mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/configAlternatively, if you are the root user, you can run:export KUBECONFIG=/etc/kubernetes/admin.confYou should now deploy a pod network to the cluster.
      Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:https://kubernetes.io/docs/concepts/cluster-administration/addons/Then you can join any number of worker nodes by running the following on each as root:kubeadm join 11.11.11.11:6443 --token 37xcrq.ksdfs6l8rqkounif \--discovery-token-ca-cert-hash sha256:1cb2eabf2b0259b1ce09b8ba52340ea7bfb799444edf2afe362affb71ea81668
      
  • 接着创建相关目录和文件

    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config# 在其他机器上创建 ~/.kube/config 文件也能通过 kubectl 访问到集群
    # 复制授权文件,以便 kubectl 可以有权限访问集群
    # 如果你其他节点需要访问集群,需要从主节点复制这个文件过去其他节点
    
  • 接着,在主节点上将 /etc/kubernetes/admin.conf 文件拷贝到 工作节点上

    sudo scp /etc/kubernetes/admin.conf 22.22.22.22:/etc/kubernetes/admin.conf 
    
    • 复制的时候,可能需要输入密码
    • 这里会有拷贝权限问题, 自行处理,比如:$ sudo chmod +r /etc/kubernetes/admin.conf
  • 现在工作节点上,也有这个文件了, 在工作节点上 执行

    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
  • 在工作节点上,加入集群

    sudo kubeadm join 11.11.11.11:6443 --token 37xcrq.ksdfs6l8rqkounif --discovery-token-ca-cert-hash sha256:1cb2eabf2b0259b1ce09b8ba52340ea7bfb799444edf2afe362affb71ea81668
    
    • 如果这个命令忘记了,或者遗失了
    • 重新获取方式,在 master 节点上执行:$ kubeadm token create --print-join-command
  • 验证节点: $ kubectl get nodes

    • 可以看到 有 master 和 node1 但是 not ready
  • 安装网络插件 flannel, 现在都是 not ready 的状态, 需要安装 flannel

    # 很有可能国内网络访问不到这个资源,你可以网上找找国内的源安装 flannel
    kubectl apply -f
    https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    
    • 这个只在 主节点 上 安装即可
  • 之后获取状态验证: $ kubectl get nodes

    • 这时候发现已经是 ready 的状态了 (需要等一小会儿)

8 ) 配置网络

  • 注意,这个是前置工作

  • 如果你后续在运行 $ kubectl describe pod/nginx 发现 Events 中有下面这个错误

    networkPlugin cni failed to set up pod "test-k8s-68bb74d654-mc6b9_default"
    network: open /run/flannel/subnet.env: no such file or directory
    
    • Flannel是由CoreOS开源的针对k8s的网络服务
    • 其目的是为解决k8s集群中各主机上Pod之间的通信问题
    • 其借助etcd维护网络IP地址分配,并为每个Node节点分配一个不同的IP地址段
    • 在每个节点创建文件 /run/flannel/subnet.env 写入以下内容,配置后等待一会就好了
  • $ vi /run/flannel/subnet.env

    FLANNEL_NETWORK=10.244.0.0/16
    FLANNEL_SUBNET=10.244.0.1/24
    FLANNEL_MTU=1450
    FLANNEL_IPMASQ=true
    
    • 注意,所有节点执行,而且这个文件在重启后将会消失
    • 后续会有替代方案,目前只考虑打通环境
  • 基于以上,k8s 环境基本搭建完成

  • 还有需要了解 master 节点不跑任务,都是在 工作节点来跑

9 )启动pod

  • 运行 nginx 应用任务, 在工作节点来运行

    kubectl run nginx --image=nginx:latest
    
  • 再执行 $ kubectl get pod -o wide 查看pod状态

  • 也可以按照之前说的 通过 kubectl describe pod/nginx 查看具体创建状态

  • 让外部可访问

    kubectl port-forward --address 0.0.0.0 pod/nginx 8000:80 # 将本机80端口转发至Pod的 80 端口
    
    • 注意在 centos9 上能使用80端口会有权限问题
    • 这里使用 8000 来对应pod中的80端口
    • 这样,在 外部,通过 22.22.22.22:8000 即可访问了

10 ) 云主机特别注意

  • 如果在 阿里云等云产品上,还需要配置安全组, 配置安全组类似于这样
    • 入站规则,添加规则
    • 类型:自定义
    • 来源:0.0.0.0/0
    • 协议端口: TCP:80
    • 策略: 允许
    • 备注: 80

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

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

相关文章

【QT入门】 Qt自定义控件与样式设计之QPushButton实现鼠标悬浮按钮弹出对话框

往期回顾&#xff1a; 【QT入门】 Qt自定义控件与样式设计之qss选择器-CSDN博客 【QT入门】 Qt自定义控件与样式设计之QLineEdit的qss使用-CSDN博客 【QT入门】Qt自定义控件与样式设计之QPushButton常用qss-CSDN博客 【QT入门】 Qt自定义控件与样式设计之QPushButton实现鼠标悬…

scipy.signal.cwt 与 pywt.cwt 使用记录

scipy.signal.cwt 该代码中widths以及freq计算公式来源于scipy.signal.morlet2函数官方案例 from scipy.signal import morlet, morlet2 from scipy import signal import matplotlib.pyplot as pltsignal_length 2000 fs 1000# 生成信号数据 time np.arange(0, signal_leng…

黄仁勋揭秘EIOFS(未来成功早期指标)英伟达成为最伟大AI企业的核心奥义

黄仁勋揭秘EIOFS(未来成功早期指标&#xff09;英伟达成为最伟大AI企业的核心奥义 原创 AI 吴厂长 AI 吴厂长 2024-04-02 00:12 上海 黄仁勋&#xff1a;你应该寻找未来成功的早期指标&#xff0c;而且越早越好。 原因是你想尽早看到自己正走在正确的方向上。 有个短语叫EIO…

Go语言中工作负载类型对并发的影响

在实际工作开发中我们需要根据工作负载是CPU密集型还是I/O密集型,使用不同的方式来解决问题。下面我们先来看这些概念,然后再讨论其影响。 在程序执行时,工作负载的执行时间会受以下因素限制: CPU的速度--例如,运行归并排序算法。工作负载被称为CPU密集型。I/O速度--例如…

Ubuntu 点击图标窗口最小化

本文所使用的 Ubuntu 系统版本是 Ubuntu 22.04 ! 用过 Ubuntu 系统的都知道&#xff0c;点击任务栏上的图标&#xff0c;它只能打开应用&#xff0c;而不能最小化应用。我希望点击图标能让窗口最小化这种效果&#xff0c;那该如何做呢&#xff1f; # 打开终端&#xff0c;输入如…

Docker-Compose配置文件docker-compose.yml详解

一份标准的docker-compose.yml文件应该包含version、services、networks三大部分&#xff0c;其中最关键的就是services和networks两个部分。 Compose和Docker兼容性&#xff1a; Compose 文件格式有3个版本,分别为1, 2.x 和 3.x 目前主流的为 3.x 其支持 docker 1.13.0 及其以…

C++---vector容器

是STL容器中的一种常用的容器&#xff0c;由于其大小(size)可变&#xff0c;常用于数组大小不可知的情况下来替代数组。vector容器与数组十分相似&#xff0c;被称为动态数组。时间复杂度为O&#xff08;1&#xff09;。 数组数据通常存储在栈中&#xff0c;vector数据通常存储…

C++ 二重指针

一 指向指针的指针 如果在一个指针变量中存放的是另一个变量的指针的地址&#xff0c;称该指针为指向指针的指针&#xff0c;即二重指针。

无线通信:调制(Modulation)方式

什么是调制方式 调制方式就是将信源信息&#xff08;要传输的信息&#xff09;加载到载波波形上&#xff0c;通过改变载波的某些特性来代表这些信息。通常&#xff0c;传统模拟信号有三种最基本的调制方式&#xff1a;改变幅度的叫调幅&#xff08;AM&#xff09;&#xff0c;…

2.1 LeetCode总结(基本算法)_DFS

1.4 练习 104. 二叉树的最大深度 int maxDepth(struct TreeNode *root, int len) {if (root NULL) {return len;}return fmax(maxDepth(root->left, len1), maxDepth(root->right, len1)); }二叉树最大深度就是基本的递归思路的求解&#xff0c; 手法主要是递归下去之…

C语言基础(三)

C语言基础 三大结构顺序结构选择结构单分支选择结构双分支选择结构多分支选择结构if ...else if....elseswitch语句 循坏结构for循环表达式1可以省略吗&#xff1f;表达式2可以省略吗&#xff1f;表达式3可以省略吗&#xff1f;for循坏的嵌套 while循环do while循坏while与do w…

android支付宝接入流程

接入前准备 接入APP支付能力前&#xff0c;开发者需要完成以下前置步骤。 本文档展示了如何从零开始&#xff0c;使用支付宝开放平台服务端 SDK 快速接入App支付产品&#xff0c;完成与支付宝对接的部分。 第一步&#xff1a;创建应用并获取APPID 要在您的应用中接入支付宝…

【新版】系统架构设计师 - 知识点 - 结构化开发方法

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 文章目录 架构 - 知识点 - 结构化开发方法结构化开发方法结构化分析结构化设计 数据流图和数据字典模块内聚类型与耦合类型 架构 - 知识点 - 结构化开发方法 结构化开发方法 分析阶段 工具&#xff1a;数据流图、…

前端学习<四>JavaScript基础——20-函数简介

函数的介绍 函数&#xff1a;就是一些功能或语句的封装。在需要的时候&#xff0c;通过调用的形式&#xff0c;执行这些语句。 补充&#xff1a; 函数也是一个对象 使用typeof检查一个函数对象时&#xff0c;会返回 function 函数的作用&#xff1a; 一次定义&#xff0c;…

Google的代码审查准则

Google的代码审查准则&#xff1a;持续优化与分享知识 在Google的软件开发流程中&#xff0c;代码审查扮演着举足轻重的角色。这一环节不仅保证了代码的质量&#xff0c;更是知识传承和经验共享的重要途径。接下来&#xff0c;我们就来深入探讨Google代码审查的几大准则。 一…

腾讯云服务器搭建网站教程,新手跟着流程一步步操作

使用腾讯云服务器搭建网站全流程&#xff0c;包括轻量应用服务器和云服务器CVM建站教程&#xff0c;轻量可以使用应用镜像一键建站&#xff0c;云服务器CVM可以通过安装宝塔面板的方式来搭建网站&#xff0c;腾讯云服务器网txyfwq.com整理使用腾讯云服务器建站教程&#xff0c;…

《黑马点评》Redis高并发项目实战笔记(上)P1~P45

P1 Redis企业实战课程介绍 P2 短信登录 导入黑马点评项目 首先在数据库连接下新建一个数据库hmdp&#xff0c;然后右键hmdp下的表&#xff0c;选择运行SQL文件&#xff0c;然后指定运行文件hmdp.sql即可&#xff08;建议MySQL的版本在5.7及以上&#xff09;&#xff1a; 下面这…

Ubuntu20.04安装ROS过程记录以及常见报错处理

官网安装步骤如下&#xff1a; http://wiki.ros.org/cn/noetic/Installation/Ubuntu#A.2BXwBZy1uJiMU- 第一个&#xff1a;添加ROS软件源 sudo sh -c echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-la…

2024年mathorcup数学建模C题思路分析-物流网络分拣中心货量预测及人员排班

# 1 赛题 C 题 物流网络分拣中心货量预测及人员排班 电商物流网络在订单履约中由多个环节组成&#xff0c;图 ’ 是一个简化的物流 网络示意图。其中&#xff0c;分拣中心作为网络的中间环节&#xff0c;需要将包裹按照不同 流向进行分拣并发往下一个场地&#xff0c;最终使包裹…

Quantum Temple借助Sui通过NFT推动再生旅游

从金融到艺术&#xff0c;从游戏到无线网络&#xff0c;各行各业都涌现出大量初创公司&#xff0c;利用区块链技术颠覆现状。说到旅游业&#xff0c;让人联想到拥挤的机场、快节奏的旅游和豪华游轮&#xff0c;可能看起来对区块链创新持守旧态度。一家初创公司认为现在是时候改…