如何在Ubuntu 22.04上安装Kubernetes集群 ?

2023-05-16

本文将向您展示如何使用 kubeadm 命令在 Ubuntu 22.04 上安装 Kubernetes 集群。

Kubernetes 是一个免费的开源容器编排工具,也称为K8S。在 Kubernetes 的帮助下,我们可以实现自动部署,容器应用程序的缩放和管理。

Kubernetes 集群由主节点 (用于管理集群中的工作节点和 pod),工作节点 (用于部署应用程序) 组成。

在本指南中,我们使用一个主节点和两个工作节点。各节点的系统要求如下

  • Minimal install Ubuntu 22.04
  • Minimum 2GB RAM or more
  • Minimum 2 CPU cores / or 2 vCPU
  • 20 GB free disk space on /var or more
  • Sudo user with admin rights
  • Internet connectivity on each node

实验设置

  • Master Node: 192.168.1.173 – k8smaster.example.net
  • First Worker Node: 192.168.1.174 – k8sworker1.example.net
  • Second Worker Node: 192.168.1.175 – k8sworker2.example.net

(1) 设置主机名并在 hosts 文件中添加条目

登录到 master 节点并使用 hostnamectl 命令设置 hostname

$ sudo hostnamectl set-hostname "k8smaster.example.net"
$ exec bash

在 worker 节点上,运行以下命令

$ sudo hostnamectl set-hostname "k8sworker1.example.net"   // 1st worker node
$ sudo hostnamectl set-hostname "k8sworker2.example.net"   // 2nd worker node
$ exec bash

在每个节点上的 /etc/hosts 文件中添加以下内容

192.168.1.173   k8smaster.example.net k8smaster
192.168.1.174   k8sworker1.example.net k8sworker1
192.168.1.175   k8sworker2.example.net k8sworker2

(2) 禁用 swap & 添加内核设置

在所有节点上,执行下面的 swapoff 和 sed 命令禁用交换功能

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

在所有节点上加载以下内核模块

$ sudo tee /etc/modules-load.d/containerd.conf <<EOF
overlay
br_netfilter
EOF
$ sudo modprobe overlay
$ sudo modprobe br_netfilter

为 Kubernetes 设置以下内核参数,运行如下的 tee 命令

$ sudo tee /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

重新加载上述更改,运行

$ sudo sysctl --system

(3) 安装 containerd 运行时

我们将在 Kubernetes 集群中使用containerd 运行时,首先要安装它的依赖项。

$ sudo apt install -y curl gnupg2 software-properties-common apt-transport-https ca-certificates

启用 docker 存储库

$ sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/docker.gpg
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

运行以下 apt 命令安装 containerd

$ sudo apt update
$ sudo apt install -y containerd.io

配置 containerd,使它使用 systemd 作为 cgroup

$ containerd config default | sudo tee /etc/containerd/config.toml >/dev/null 2>&1
$ sudo sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml

重启并启用 containerd 服务

$ sudo systemctl restart containerd
$ sudo systemctl enable containerd

(4) 添加 Kubernetes apt 存储库

执行以下命令为 Kubernetes 添加 apt 存储库

$ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
$ sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"

注意: 在编写本指南时,Xenial 是最新的 Kubernetes 存储库,但是当存储库在 Ubuntu 22.04 (Jammy Jellyfish)上可用时,你需要在 apt-add-repository 命令中用 jammy 替换 xenial

(5) 安装 Kubectl, kubeadm 和 kubelet

Install Kubernetes components like kubectl, kubelet and Kubeadm utility on all the nodes. Run following set of commands,

在所有节点上安装 kubectl,kubelet,Kubeadm

$ sudo apt update
$ sudo apt install -y kubelet kubeadm kubectl
$ sudo apt-mark hold kubelet kubeadm kubectl

(6) 使用 Kubeadm 命令初始化 Kubernetes 集群

我们已经准备好初始化 Kubernetes 集群,仅在主节点上运行以下 Kubeadm 命令。

$ sudo kubeadm init --control-plane-endpoint=k8smaster.example.net

Kubeadm-initialize-kubernetes-ubuntu-22-04

上面的输出确认控制面板已成功初始化,我们还得到了一组与集群交互的命令,以及工作节点加入集群的命令。

因此,要开始与集群交互,请从主节点运行以下命令

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

现在,尝试运行以下 kubectl 命令来查看集群和节点状态

$ kubectl cluster-info
$ kubectl get nodes

Initial-k8s-cluster-information

将两个工作节点加入到集群中,命令已经有输出了,只需要在工作节点上复制粘贴即可

$ sudo kubeadm join k8smaster.example.net:6443 --token vt4ua6.wcma2y8pl4menxh2 \
   --discovery-token-ca-cert-hash sha256:0494aa7fc6ced8f8e7b20137ec0c5d2699dc5f8e616656932ff9173c94962a36

两个工作节点上的输出如下:

Woker1-Join-kubernetes-Cluster

Woker2-Join-kubernetes-Cluster

在主节点使用 kubectl 命令检查节点状态

$ kubectl get nodes

Node-Status-K8s-Before-CNI

As we can see nodes status is ‘NotReady’,
so to make it active. We must install CNI (Container Network Interface)
or network add-on plugins like Calico, Flannel and Weave-net.

正如我们看到的,节点的状态是 NotReady,所以要使它激活。我们必须安装 CNI (Container Network Interface) 或例如 Calico, Flannel 和 Weave-net 等插件

(6) 安装 Calico Pod Network Add-on

在主节点运行以下 curl 和 kubectl 命令安装 Calico 网络插件

$ curl https://projectcalico.docs.tigera.io/manifests/calico.yaml -O
$ kubectl apply -f calico.yaml

Install-Calico-Network-Add-on-k8s

验证 kube-system 命名空间中 pods 的状态

$ kubectl get pods -n kube-system

Kube-System-Pods-after-calico-installation

太好了,检查一下节点状态

$ kubectl get nodes

Nodes-Status-after-Calico-Network-Add-on

上面的输出确认了节点是活动节点,我们可以说我们的 Kubernetes 集群是有效的。

(7) 测试 Kubernetes

为了测试 Kubernetes,让我们尝试部署基于 nginx 的应用程序并尝试访问它。

$ kubectl create deployment nginx-app --image=nginx --replicas=2

检查 nginx-app 部署状态

$ kubectl get deployment nginx-app
NAME        READY   UP-TO-DATE   AVAILABLE   AGE
nginx-app   2/2     2            2           68s
$

将部署公开为 NodePort 模式

$ kubectl expose deployment nginx-app --type=NodePort --port=80
service/nginx-app exposed
$

查看服务状态,执行以下命令

$ kubectl get svc nginx-app
$ kubectl describe svc nginx-app

Deployment-Service-Status-k8s

使用以下命令访问基于 nginx 的应用程序

$ curl http://:31246

$ curl http://192.168.1.174:31246

Curl-Command-Access-Nginx-Kubernetes

很好,上面的输出证实了基于 nginx 的应用程序是可访问的。

我的开源项目

酷瓜云课堂

  • course-tencent-cloud(酷瓜云课堂 - gitee仓库)
  • course-tencent-cloud(酷瓜云课堂 - github仓库)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Ubuntu 22.04上安装Kubernetes集群 ? 的相关文章

  • ThinkPHP URL路由解析

    ThinkPHP是国内非常火的一个轻量级框架 xff0c 采用MVC模式 xff0c 结构写的非常好 xff0c 今天 大象 带大家走一下ThinkPHP框架系统运行流程 xff0c 我将跟随ThinkPHP的执行进行代码讲解 xff0c
  • 【gRPC】双向认证下grpc-gateway原理及简单使用

    文章目录 前言一 grpc gateway原理二 环境准备三 服务端改造四 总结 前言 在上一篇文章自签CA 服务端和客户端双向认证中 xff0c 我们了解了双向认证并进行了实践 xff0c 本篇文章将基于双向认证 xff0c 使用gRPC
  • php 装饰模式

    lt php abstract class component public abstract function operation class concretecomponent extends component public func
  • Beyond Compare在Mac OS系统下永久试用

    亲测可用 一 原理 Beyond Compare每次启动后会先检查注册信息 xff0c 试用期到期后就不能继续使用 解决方法是在启动前 xff0c 先删除注册信息 xff0c 然后再启动 xff0c 这样就可以永久免费试用了 二 下载 首先
  • RSA加密解密(PHP Demo)

    private key 61 39 BEGIN RSA PRIVATE KEY MIICXQIBAAKBgQDpoODVtnSztGyb p 43 g Ob36jb3jzWzS2qovOjpY rrTjwlVcQ pB2m1nZDQNpTF
  • 【Pandas】优化读取文件内存占用过大的问题

    编写于2022 11 6 1 内存占用计算 做了个小实验 xff0c 发现pandas读取文件时 xff0c 内存占用是真的高 xff1a span class token keyword import span sys span clas
  • springboot+chatgpt+chatUI Pro开发智能聊天工具

    应广大网友要求 xff0c 也为了节约大家的时间现为大家奉献上源码下载地址 xff1a https download csdn net download xiangyuanhong08 87708197源码下载后在IDEA导入项目后自己修改
  • dockerfile指令解析

    Dockerfile 是一个文本文件 xff0c 其内包含了一条条的指令 Instruction xff0c 用于构建镜像 指令集描述FROM指定基础镜像 xff0c 必须为第一个命令MAINTAINER维护者信息RUN构建镜像 docke
  • openEuler社区人才评定考试流程指引

    最近因为公司工作的需要参加考试了openEuler社区人才评定考试 xff0c 本次考试题型主要包括单选 多选 判断三类题型 考试内容基本都是操作系统使用相关的内容 考试需要注意事项 xff1a 1 考试为线上答题考试 xff0c 需开启摄
  • spire.doc 让java操作word文档更简单优雅

    Spire Doc for Java 是一款专业的 Java Word 组件 xff0c 开发人员使用它可以轻松地将 Word 文档创建 读取 编辑 转换和打印等功能集成到自己的 Java 应用程序中 作为一款完全独立的组件 xff0c S
  • jodconverter 2.2.2 +openoffice4.0 doc转换成pdf

    一 环境 linux下安装openoffice 1 首先先下载好需要的rpm包 xff1a Apache OpenOffice 4 0 0 Linux x86 64 install rpm zh CN tar gz 或直接命令下载 xff1
  • JAVA和PHP版CAS客户端集成

    一 背景 随着公司的不断的发展壮大和公司信息的建设逐步完善 xff0c 公司内部系统也在不断的增加 xff0c 为避免公司员工因系统过多造成账号密码混乱或忘记密码情况 公司决定将公司内部系统进行统一登录管理 通过CAS实现公司内部业务系统
  • 【gRPC】批量操作、服务端、客户端、双向流介绍及使用案例

    文章目录 前言服务端准备一 传统批量操作方式二 服务端流三 客户端流四 双向流 前言 在之前的文章中 xff0c 我们通常的做法都是客户端请求 服务端响应的模式 xff0c 客户端收集好所有的请求信息 xff0c 发送到服务端 xff0c
  • JAVA中文件下载和文件批量下载方法

    JAVA中的文件下载 文件下载 64 param request 64 param response 64 param filePath 文件路径 64 param filename 下载时文件名称 public static void d
  • JAVA中通过poi和pdfbox读取office文件和pdf文件内容

    最近做了个文档管理系统 xff0c 实现了公司文档资源在线化 因为涉及到全文搜索 xff0c 所以需要读取文件的内容创建全文索引 本人通过POI读取的office文件和pdfbox读取的pdf文件内容 xff0c 具体代码如下 xff1a
  • ubuntu 系统学习笔记

    ubuntu 12 04 3 server i386 iso LTS版 安装后无图形操作界面 xff0c 所以用apt get 安装图形操作相关软件 xff0c 过程如下 xff1a 一 先学习一下图形操作界面相关知识 xff1a 参考ht
  • WSL2安装及GPU的使用

    目录 WSL2WSL2安装运行Docker运行第一个Container WSL2 WSL Windows Subsystem for Linux 可以让开发者们在win10系统中运行Linux环境 xff0c 包括Linux命令行及应用等
  • C++ sort之Segmentation fault原因及其解决方法

    写sort的比较函数时要符合给定的要求 xff0c 否则可能会出现Segmentation fault异常 文档上对比较函数的要求 xff1a Binary function that accepts two elements in the
  • Ubuntu安装配置NX Server

    Ubuntu安装VNC xff0c VNC却无法随系统启动 xff0c 遂换成NX Server xff08 不是FreeNX xff09 一 下载 xff08 免费版本 xff0c 仅2个会话 xff09 下载URL xff1a http
  • Bash shell中的位置参数$#,$*,$@,$0,$1,$2...及特殊参数$?,$-等的含义

    在Bash shell中经常会 见到一些比较特殊的符号 xff0c 本人现收集与此 xff0c 以供查阅 xff1a 位置参数 xff1a 详见ABS Advanced Bash Shell 中文翻译版103页第9章第一节内部变量 xff0

随机推荐

  • Python3.x No module named 'PIL'

    No module named 39 PIL 39 是因为需要pillow 打开命令行使用pip install Pillow命令 安装完成之后 xff0c 重新运行程序 xff0c 就没问题了
  • 基于Docker的数据库和文件同步的服务部署

    基于Docker的数据库和文件同步的服务部署 目录 基于Docker的数据库和文件同步的服务部署功能需求描述准备同步方案一 数据库同步1 如何同步 2 主从数据库功能划分 二 文件同步方案一 xff08 rsyncd方式 建议 xff09
  • vs2022文件自动保存为utf-8-bom格式方法

    使用 EditorConfig 可以让VS保存的文件默认编码为UTF 8 bom格式 更多信息查看微软文档 root span class token operator 61 span span class token boolean tr
  • 【gRPC】gRPC中拦截器的介绍及使用

    文章目录 前言一 服务端拦截器1 一元拦截器 xff1a UnaryInterceptor2 流式拦截器 xff1a StreamInterceptor3 实现服务端拦截器 一 客户端拦截器1 一元拦截器 xff1a WithUnaryIn
  • Java实现字符串数组和字符串排序

    在Java环境下 xff0c 对字符串数组或者对字符串排序都是一件很容易的事情 xff0c 只要调用java util包下的Arrays类的sort方法即可对其排序 有没有想过 xff0c 我们自己也可以利用排序算法编写一个属于自己的字符串
  • Jenkins安装问题记录

    1 使用命令安装时提示证书已过期 xff1a 安装命令 xff1a sudo wget O etc yum repos d jenkins repo https pkg jenkins io redhat stable jenkins re
  • kubernetes交付单节点kafka+zookeeper

    一 交付zookeeper 1 编写脚本文件 首先创建一个命名空间 root 64 k8s master zk kubectl create ns kafka test root 64 k8s master zk cat zookeeper
  • K8S交付postgres数据库initdb报错

    问题描述 xff1a 在交付postgres到k8s启动时 xff0c 出现初始化数据库的报错 解决方法 xff1a 手动用dockerfile修改一下原始镜像的配置文件 xff0c 关闭huge pages FROM postgres 1
  • 发布网

    https developer apple com
  • PVE添加cpu温度显示---U盘安装Proxmox VE(三)

    转自我的个人博客 xff1a PVE添加cpu温度显示 U盘安装Proxmox VE xff08 三 xff09 作为放家里的小Server xff0c 对整个服务器的温度监控还是很有必要的 xff0c 当初选择pve也是因为pve可diy
  • PVE(Proxmox VE) 显卡直通

    最近弄了个小server xff0c 安装了pve xff0c 安装了个win7和centos xff0c 想把集显直通给win7使用 xff0c 捣鼓了下pve硬件直通还挺方便 xff0c 记录一下 1 修改grub xff0c 编辑文件
  • SVN IDEA E230001 解决方案

    IDEA 中的 E230001 问题解决方案 在项目开发中 xff0c 遇到IDEA 不能下载SVN仓库代码的问题 xff0c 认证验证失败 xff0c 如下 这个其实是由于IDEA 不能自动识别在SVN中的设置导致的 之前在网上搜索过了
  • 【STM32学习】(5)按键控制流水灯(中断实现)

    学习单片机都要学习流水灯 xff0c 因为流水灯比较简单 xff0c 易于实现 xff0c 效果也比较好呈现 上个博客是按键实现了流水灯控制 xff0c 本次博客我们使用中断来实现流水灯 xff0c 中断的重要性不需多讲 xff0c 就是很
  • 部署Nextcloud+Onlyoffice

    一 LAMP方式安装 环境准备 centos7 7 操作系统 xff1a cnetos7 7 4核4G 40G硬盘 数据库版本 xff1a MariaDB10 2 37 php版本 xff1a php7 3 Apache版本 httpd 2
  • 【牛客网】链表区间反转

    题目链接 xff1a BM2 链表内指定区间反转 题目描述 xff1a 思路 xff1a 思路很简单 xff0c 先定义一个指针 xff0c 让它走m 1步到第m 1个的位置 xff0c 然后反转 m n 区间内的链表 xff0c 将其接到
  • 细菌实验分组(C程序设计进阶 第2周)

    编程题 xff03 5 xff1a 细菌实验分组 注意 xff1a 总时间限制 1000ms 内存限制 65536kB 描述 有一种细菌分为A B两个亚种 xff0c 它们的外在特征几乎完全相同 xff0c 仅仅在繁殖能力上有显著差别 xf
  • 结构体和结构体数组

    什么是结构体 xff1a 一组数组异质的数组 xff0c 但自成整体的数据 结构体变量的定义方法 先声明结构体类型 xff0c 再定义变量类型 声明结构体变量时不分配空间 xff0c 在定义结构体变量时才分配内存空间 例1 学校体育考试 x
  • 如何在 Debian 11 系统中安装 VirtualBox ?

    VirtualBox 是一款用于桌面级的免费开源虚拟化软件 它适用于 Linux 和 Windows 操作系统 VirtualBox 允许创建多个不同操作系统的虚拟机 通过创建虚拟机 xff0c 在笔记本电脑或桌面电脑上设置测试环境 必备条
  • 如何在 Debian 系统上安装 VMware Workstation Pro ?

    VMware Workstation 是一个最好的虚拟化工具 xff0c 使用在 windows 和 Linux 桌面级别 它有两个不同的版本 xff0c VMware Workstation Player 和 VMware Worksta
  • 如何在Ubuntu 22.04上安装Kubernetes集群 ?

    本文将向您展示如何使用 kubeadm 命令在 Ubuntu 22 04 上安装 Kubernetes 集群 Kubernetes 是一个免费的开源容器编排工具 xff0c 也称为K8S 在 Kubernetes 的帮助下 xff0c 我们