Ubuntu 22.04 搭建K8s集群
本文基于Mac平台和Parallels软件,在其中创建三个Ubuntu系统,搭建了一个3个节点(1个master和2个Node)的K8s集群。下面的步骤没有特殊说明,都是需要在所有节点上分别执行的。也可以在一个虚拟机上执行完之后,复制当前虚拟机作为其他节点。
1. 虚拟机基础配置
基于Parallels虚拟机软件,在其中安装三个ubuntu系统,后续用于创建K8s集群的master节点和两个Node节点,三个节点均采用静态ip,具体配置如下:
Master节点:192.168.31.200 master
Node1节点:192.168.31.201 node1
Node2节点:192.168.31.202 node2
配置静态ip
需要在三个节点上分别配置,下面以master为例:
修改虚拟机网络为桥接模式:
设置主机名
在Master节点运行
sudo hostnamectl set-hostname master
其他节点分别运行
sudo hostnamectl set-hostname node1
sudo hostnamectl set-hostname node2
设置hosts
方便节点之间相互访问,在每个节点的/etc/hosts
上添加如下配置:
192.168.31.200 master
192.168.31.201 node1
192.168.31.202 node2
配置好之后,试下ping master、node1看能否正常访问。
安装ssh
安装ssh,方便后续连接到虚拟机执行cmd。
sudo apt update
sudo apt install openssh-server
sudo systemctl status ssh
# 如果遇到防火墙的问题,可以尝试下面的command来允许ssh。
sudo ufw allow ssh
后续为了方便在多个terminal同时输入command,可以使用iterm同时打开三个窗口,然后输入
cmd + shift + I
进入多个输入的模式,如果需要退出,可以输入⌘Command + ⇧Shift + ⌥Option + I
。
2. Ubuntu系统设置
禁用swap
sudo swapoff -a
sudo sed -i '/ swap / s/^(.*)$/#1/g' /etc/fstab
这步之后,最好重启ubuntu系统保证修改生效。
修改内核参数
载入如下内核模块,
sudo tee /etc/modules-load.d/containerd.conf <<EOF
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
相关资料参考:
配置下面的网络参数:
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
运行下面的command使改动生效:
sudo sysctl --system
3. 安装containerd
Docker,Kubernetes 等工具来运行一个容器时会调用组件(CRI)比如 containerd,CRI-O来来完成容器的创建、运行、销毁等实际工作。Docker 使用的是 containerd 作为其运行时;Kubernetes 支持 containerd,CRI-O等,这些组件都遵循了 OCI 规范,并通过 runc 来实现与操作系统内核交互来完成容器的创建和运行。
他们之间的相互关系如下:
具体安装步骤如下:
- 安装dependencies:
sudo apt install -y curl gnupg2 software-properties-common apt-transport-https ca-certificates
- 添加docker repo:
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"
- 安装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
- 重启并设置开机自启
sudo systemctl restart containerd
sudo systemctl enable containerd
4. 安装Kubernetes组件
添加apt repo
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"
安装Kubectl, kubeadm & kubelet
sudo apt update
sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
apt-mark 用于将软件包标记/取消标记为自动安装。 hold 选项用于将软件包标记为保留,以防止软件包被自动安装、升级或删除。这里主要是为了防止kubelet等组件自动升级。
5. 初始化Master节点
这步需要在Master节点进行设置,运行如下的节点初始化整个k8s集群。
sudo kubeadm init --control-plane-endpoint=192.168.31.200
当看到如下的输出时,说明系统master节点初始化完成。
接着按照提示信息,进行后续的初始化工作:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
完成上面的工作之后,可以尝试运行下面的command来查看当前集群的状态:
kubectl cluster-info
kubectl get nodes
输入类似如下
6. 加入Node节点
在master节点的初始化输出的最下面,会列出node节点加入的command,直接copy然后到每个node节点运行即可。下面是个例子,得换成实际的command,
sudo kubeadm join 192.168.31.200:6443 --token mjy0xx.95lsse7r7fw5sb00
--discovery-token-ca-cert-hash sha256:73b92db9baf19a3e14d679e6d44b5c7a804902d6ffa3d170858d2ccfd5e0c93f
加入成功之后,可以查看当前集群的node状态,此时由于没有安装网络相关插件,所有节点出于NotReady的状态。下一步会进行安装。
kubectl get nodes
7. 配置集群网络
一般可以安装Calico、Flannel和Weave-net等插件,下面以Calico为例进行操作。
curl https://projectcalico.docs.tigera.io/manifests/calico.yaml -O
kubectl apply -f calico.yaml
输出结果大概如下:
此时可以查看系统namespace下的所有基础组件的运行情况,
kubectl get pods -n kube-system
接下来检查节点状态:
kubectl get nodes
至此,整个k8s集群搭建完毕, 下面可以进行一些基本测试。
8. 测试K8s集群
这里部署了一个nginx的app来进行测试,
kubectl create deployment nginx-app --image=nginx --replicas=2
查看nginx的状态:
kubectl get deployment nginx-app
将deployment暴露出去,采用NodePort的方式(这种方式会在每个节点上开放同一个端口,外部可以通过节点ip+port的方式进行访问)
kubectl expose deployment nginx-app --type=NodePort --port=80
可以检查service的状态,
kubectl get svc nginx-app
kubectl describe svc nginx-app
下面是测试结果:
说明Nginx运行正常,整个k8s节点部署成功。
参考:
Ubuntu 22.04 搭建K8s集群的更多相关文章
- kubeadm 搭建 K8S集群
kubeadm是K8s官方推荐的快速搭建K8s集群的方法. 环境: Ubuntu 16.04 1 安装docker Install Docker from Ubuntu’s repositories: ...
- kubeadm搭建K8s集群及Pod初体验
基于Kubeadm 搭建K8s集群: 通过上一篇博客,我们已经基本了解了 k8s 的基本概念,也许你现在还是有些模糊,说真的我也是很模糊的.只有不断地操作去熟练,强化自己对他的认知,才能提升境界. 我 ...
- 教你用multipass快速搭建k8s集群
目录 前言 一.multipass快速入门 安装 使用 二.使用multipass搭建k8s集群 创建3台虚拟机 安装master节点 安装node节点 测试k8s集群 三.其他问题 不能拉取镜像:报 ...
- Ubuntu 14.04中Elasticsearch集群配置
Ubuntu 14.04中Elasticsearch集群配置 前言:本文可用于elasticsearch集群搭建参考.细分为elasticsearch.yml配置和系统配置 达到的目的:各台机器配置成 ...
- 1 搭建K8s集群
官网:https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/#installing ...
- 搭建K8S集群
一.前言 我们将现有的虚拟机称之为Node1,用作主节点.为了减少工作量,在Node1安装Kubernetes后,我们利用VirtualBox的虚拟机复制功能,复制出两个完全一样的虚拟机作为工作节点. ...
- 从0到1搭建k8s集群系列1:安装虚拟机及docker
前言 本系列文章记录了本人学习k8s集群搭建的过程,从k8s基本组件的安装.到部署mysql服务到k8s集群.部署web项目到k8s集群以及安装可视化界面管理工具kuboard. 因为k8s的组件安装 ...
- CentOS7 使用 kubeadm 搭建 k8s 集群
一 安装Docker-CE 前言 Docker 使用越来越多,安装也很简单,本次记录一下基本的步骤. Docker 目前支持 CentOS 7 及以后的版本,内核要求至少为 3.10. Docker ...
- Rancher 下图形界面 搭建 K8S 集群
首先我们准备4台 2核3G 的 centos 7 温馨提示:先安装好一台 CentOS 的虚拟机,并且安装好 docker,永久关闭防火墙. 再这个基础上我们分别克隆出四台 Rancher.K8S1. ...
- 关于使用kubeoperator搭建k8s集群使用containerd作为容器运行时,从自己搭建的habor仓库拉取镜像的有关说明
1.kubepi界面添加habor仓库信息,并授权给k8s集群 这一步的操作是当在工作负载选择从harbor仓库拉取镜像时会自动创建有关的secrets信息,从而不用事先手动创建了(有别于kuboar ...
随机推荐
- 记一个nginx server_name配置多个时的坑
文章转载自:https://blog.csdn.net/u011296355/article/details/106740860/ 背景 为了区分线上环境和测试环境,我弄了个自己测试专用的域名test ...
- 在 CentOS8/RHEL8 中配置 Rsyslog 服务器
Rsyslog 是一个自由开源的日志记录程序,在 CentOS 8 和 RHEL 8 系统上默认可用.它提供了一种从客户端节点到单个中央服务器的"集中日志"的简单有效的方法.日志集 ...
- 【面试题】Vue2动态添加路由 router.addRoute()
Vue2动态添加路由 点击打开视频讲解更加详细 场景: 一般结合VueX和localstorage一起使用 router.addRoutes vue-router4后 已废弃:使用 router.ad ...
- MySQL数据库-数据表(下)
分析:给 reader 表添加数据. INSERT INTO:插入数据,插入数据的时候会检查主键或者唯一索引,如果出现重复就会报错: 语法:INSERT INTO table_name VALUES ...
- VMware安装Win11+WSA子系统和使用教程
VMware安装Win11+WSA子系统和使用教程 作者:Sna1lGo 时间:2022/9/29 下载相关文件: Win11镜像:Download Windows 11 (microsoft.com ...
- LeetCode - 统计数组中的元素
1. 统计数组中元素总结 1.1 统计元素出现的次数 为了统计元素出现的次数,我们肯定需要一个map来记录每个数组以及对应数字出现的频次.这里map的选择比较有讲究: 如果数据的范围有限制,如:只有小 ...
- POJ3260 The Fewest Coins(混合背包)
支付对应的是多重背包问题,找零对应完全背包问题. 难点在于找上限T+maxv*maxv,可以用鸽笼原理证明,实在想不到就开一个尽量大的数组. 1 #include <map> 2 #inc ...
- Java学习之路:HelloWorld
2022-10-08 16:13:57 HelloWorld 1. 随便新建一个文件夹,存放代码 2. 新建一个Java文件 文件后缀名为.java hello.java 注意:系统没有显示后 ...
- 快速上手Mybatis项目
快速上手Mybatis项目 思路流程:搭建环境-->导入Mybatis--->编写代码--->测试 1.搭建实验数据库 CREATE DATABASE `mybatis`; USE ...
- 使用idea操作git(ssh协议)
问题 我们发现,使用IDEA上的git功能,当使用ssh协议出现了可以commit但无法push和pull的问题,经过测试发现原因是Could not read from remsitory.直接翻译 ...