首页 > 系统相关 >Ubuntu 22.04 搭建K8s集群

Ubuntu 22.04 搭建K8s集群

时间:2022-12-09 23:24:07浏览次数:82  
标签:kubectl containerd sudo apt 22.04 Ubuntu 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 来实现与操作系统内核交互来完成容器的创建和运行。

他们之间的相互关系如下:

image-20221209223024990

具体安装步骤如下:

  • 安装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节点初始化完成。

image-20221209224223297

接着按照提示信息,进行后续的初始化工作:

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

输入类似如下

image-20221209224426382

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

image-20221209224649419

7. 配置集群网络

一般可以安装Calico、Flannel和Weave-net等插件,下面以Calico为例进行操作。

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

输出结果大概如下:

image-20221209224937176

此时可以查看系统namespace下的所有基础组件的运行情况,

kubectl get pods -n kube-system

image-20221209225133515

接下来检查节点状态:

kubectl get nodes

image-20221209225224831

至此,整个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

image-20221209225542880

下面是测试结果:

image-20221209230257244

说明Nginx运行正常,整个k8s节点部署成功。


参考:

标签:kubectl,containerd,sudo,apt,22.04,Ubuntu,K8s,安装,节点
From: https://www.cnblogs.com/way2backend/p/16970506.html

相关文章

  • K8s 高性能网络组件详解:Calico 的 IPIP 网络模式
    前言本文主要分析K8s中网络组件calico的IPIP网络模式。旨在理解IPIP网络模式下产生的calixxxx,tunl0等设备以及跨节点网络通信方式。可能看着有点枯燥,但是请花几分......
  • 每天一点基础K8S--K8S中的deployment(一)基础语法、扩容缩容、滚动升级和回滚
    deploymentdeployment基础上一节试验了replicaset控制器,它可以保证设置的pod数量,但是在升级时,却做不到自动升级,kubectlapply-fxxxx,并不能实时生效。今天看看deplo......
  • Kubernetes(k8s) kubectl set resources常用命令
    kubectl在$HOME/.kube目录中查找一个名为config的配置文件。可以通过设置KUBECONFIG环境变量或设置--kubeconfig参数来指定其它kubeconfig文件。本文主要介绍K......
  • 虚拟机中安装Ubuntu到最后时卡死在:执行安装后执行的触发器
    问题描述:在虚拟机中安装Ubuntu系统时,卡在执行安装后执行的触发器update-notifier-common,ubuntuubiquityprocessingtriggersforupdate-notifier-common解决方法:关闭网......
  • framework 用 jexus 也能跑 k8s
     Jexus以支持ASP.NET、Core、php在Linux上运行为特色,能够支持ASP.NET的原理,就是在Linux上安装了Mono(跨平台.NET运行环境),进而支持ASP.NET程序的运行。官网:JexusWebServ......
  • K8S 搭建 InfluxDB-Cluster
    github地址:https://github.com/influxtsdb/helm-charts/tree/master/charts/influxdb-cluster前提条件安装好K8S,helm,git配置好K8S存储部署和注意事项mkdir/......
  • k8s 节点node维护
    1、设置节点不可调度kubectlcordonnode02设置node02不可调度,查看各节点状态,发现node02为SchedulingDisabled,此时master不会将新的pod调度到该节点上,但是node02上pod还是正......
  • 二进制部署高可用k8s集群
    一、k8s高可用架构解析etcd是键值数据库用来存储集群信息apiserver是集群的整个控制中心,所有的流量都会经过他ControllerManager控制器,监控整个集群的状态Scheduler调......
  • Ubuntu18.04 source.list更新国内源
    在更新源之前先作为备份sudovim/etc/apt/source.list 使用下列任意一个源即可:清华大学debhttp://mirrors.tuna.tsinghua.edu.cn/ubuntu/xenialmainrestri......
  • ubuntu20.04下安装mysql5.7后,允许远程登录
    1、在mysql的配置文件中设置bind-address=0.0.0.0 2、在databasemysql中设置root用户的host为% 安装deb后使用apt-cachepolicymysql-server查看......