基于Ubuntu-22.04 kubeadm安装K8s-v1.28.2

最近在学习云原生的相关课程,接下来一段时间会每周更新一次相关实验,同时记录以下自己成长的过程,希望大家喜欢。

实验环境说明

k8s-master0110.1.1.11
k8s-node0110.1.1.21
k8s-node0210.1.1.22
k8s-node0310.1.1.23

版本信息

Ubuntu 22.04arm64、Kubernetes:v1.28.2、Continerd.io 1.6.26

1环境配置要求:

设置主机名及解析,设定时钟同步,关闭swap和防火墙,开启IPv4转发。

1.设置主机名及解析

#设置主机名及解析
#master01
root@k8s-master01:~# cat /etc/hosts
10.1.1.11 k8s-master01.magedu.com k8s-master01 kubeapi.magedu.com kubeapi
10.1.1.12 k8s-master02.magedu.com k8s-master02
10.1.1.13 k8s-master03.magedu.com k8s-master03
10.1.1.21 k8s-node01.magedu.com k8s-node01
10.1.1.22 k8s-node02.magedu.com k8s-node02
10.1.1.23 k8s-node03.magedu.com k8s-node03
#node01和node02和node03配置一样的/etc/hosts

2.关闭swap和防火墙

root@k8s-master01:~# swapoff -a
# 注释/etc/fstab文件的最后一行
root@k8s-master01:~# sed -i '/swap/s/^/#/' /etc/fstab
root@k8s-master01:~# ufw status
Status: inactive
#node01和node02和node03也是执行关闭swap和防火墙一样的操作

3.开启IPv4转发

#四台服务器都需要开启IPv4转发
root@k8s-master01:~# cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
> overlay
> br_netfilter
> EOF
overlay
br_netfilter
root@k8s-master01:~# modprobe overlay
root@k8s-master01:~# modprobe br_netfilter
root@k8s-master01:~# cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
> net.bridge.bridge-nf-call-iptables  = 1
> net.bridge.bridge-nf-call-ip6tables = 1
> net.ipv4.ip_forward                 = 1
> EOF
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
root@k8s-master01:~# sysctl --system

2安装containerd

通过apt安装containerd, 只能安装1.5.9,版本过低,参考k8s和containerd匹配要求,k8s 1.28.2最好使用containerd的1.6.26

#node01和node02和node03都需要安装containerd此操作
root@k8s-master01:~# curl -# -O  https://mirrors.aliyun.com/docker-ce/linux/ubuntu/dists/jammy/pool/stable/amd64/containerd.io_1.6.26-1_amd64.deb
root@k8s-master01:~# dpkg -i containerd.io_1.6.26-1_amd64.deb
#导出默认配置
root@k8s-master01:~# containerd config default > /etc/containerd/config.toml
#编辑配置文件
root@k8s-master01:~# vim /etc/containerd/config.toml
1.#修改containerd使用SystemdCgroup
SystemdCgroup = true
2.#配置containerd使用国内mirror站点上的pause镜像及指定版本
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"
3.#配置containerd使用国内的Image加速服务,以加速Image获取
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
#在此后面添加以下四行内容
 [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
    endpoint = ["https://docker.mirrors.ustc.edu.cn", "https://registry.docker-cn.com"]

[plugins."io.containerd.grpc.v1.cri".registry.mirrors."registry.k8s.io"]
endpoint = ["https://registry.aliyuncs.com/google_containers"]
#启动containerd服务
root@k8s-master01:~# systemctl enable containerd
root@k8s-master01:~# systemctl restart containerd

3配置crictl客户端

root@k8s-master01:~# vim /etc/crictl.yaml
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: true

4安装kubuadm、kubelet、kubectl

首先,在各主机上生成kubulet、kubeadm等相关程序包的仓库,这里以阿里云的镜像服务为例:

root@k8s-master01:~# apt update && apt install -y apt-transport-https curl
root@k8s-master01:~# curl -fsSL https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
OK
root@k8s-master01:~# cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
> deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
> EOF
root@k8s-master01:~# apt update
root@k8s-master01:~# apt install -y kubelet kubeadm kubectl
root@k8s-master01:~# systemctl enable kubelet

5初始化master节点

#列出镜像
root@k8s-master01:~# kubeadm config images list --image-repository=registry.aliyuncs.com/google_containers --kubernetes-version="v1.28.2"
#拉取下载镜像
root@k8s-master01:~# kubeadm config images pull --image-repository=registry.aliyuncs.com/google_containers --kubernetes-version="v1.28.2"
#运行如下命令完成初始化
root@k8s-master01:~# kubeadm init --control-plane-endpoint="kubeapi.magedu.com" --kubernetes-version=v1.28.2 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --image-repository=registry.aliyuncs.com/google_containers --upload-certs
#命令中的各选项说明:
--image-repository:指定要使用的镜像仓库,默认为registry.k8s.io;
--kubernetes-version:kubernetes程序组件的版本号,它必须要与安装的kubelet程序包的版本号相同;
--control-plane-endpoint:控制平面的固定访问端点,可以是IP地址或DNS名称,会被用于集群管理员及集群组件的kubeconfig配置文件的API Server的访问地址;单控制平面部署时可以不使用该选项;
-pod-network-cidr:Pod网络的地址范围,其值为CIDR格式的网络地址,通常,Flannel网络插件的默认为10.244.0.0/16,Project Calico插件的默认值为192.168.0.0/16;
--service-cidr:Service的网络地址范围,其值为CIDR格式的网络地址,默认为10.96.0.0/12;通常,仅Flannel一类的网络插件需要手动指定该地址;
root@k8s-master01:~# mkdir .kube
root@k8s-master01:~# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
root@k8s-master01:~# ls .kube/
config
root@k8s-master01:~# kubectl get nodes
NAME           STATUS     ROLES           AGE     VERSION
k8s-master01   Ready   control-plane   4m20s   v1.28.2

6设定kubectl

kubectl是kube-apiserver的命令行客户端程序,实现了除系统部署之外的几乎全部的管理操作,是kubernetes管理员使用最多的命令之一。kubectl需经由API server认证及授权后方能执行相应的管理操作,kubeadm部署的集群为其生成了一个具有管理员权限的认证配置文件/etc/kubernetes/admin.conf,它可由kubectl通过默认的“$HOME/.kube/config”的路径进行加载。当然,用户也可在kubectl命令上使用–kubeconfig选项指定一个别的位置。

#复制认证为Kubernetes系统管理员的配置文件至当前用户root的家目录
root@k8s-master01:~# mkdir .kube
root@k8s-master01:~# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
root@k8s-master01:~# ls .kube/
config
#验证master节点已就绪
root@k8s-master01:~# kubectl get nodes
NAME           STATUS     ROLES           AGE     VERSION
k8s-master01   Ready   control-plane   4m20s   v1.28.2

7部署网络插件

root@k8s-master01:~# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
root@k8s-master01:~# kubectl apply -f kube-flannel.yml
root@k8s-master01:~# kubectl get nodes
NAME           STATUS   ROLES           AGE   VERSION
k8s-master01   Ready    control-plane   95m   v1.28.2
k8s-node01     Ready    <none>          49m   v1.28.2
k8s-node02     Ready    <none>          48m   v1.28.2
k8s-node03     Ready    <none>          50m   v1.28.2

8添加节点到集群中

节点所有配置与master节点一致,只是最后不需要执行初始化,而执行kubeadm jion来加入节点根据主节点初始化集群的输出,在Worker节点执行以下命令将该节点加入Kubernetes集群:

#在node01和node02和node03上分别执行,加入集群
kubeadm join kubeapi.magedu.com:6443 --token yn088m.z5xwy4ulhy8rt4kg --discovery-token-ca-cert-hash sha256:62d4f2572d762fa1565f57b19e2637fa4a0de71cf6af15e313e30a8b940deda1

新节点加入集群时token已过期,需要重新生成,在master执行如下命令

#新节点加入集群时token已过期,需要重新生成,在master执行如下命令 
root@k8s-master01:~# kubeadm token create --print-join-command 

9测试应用编排及服务访问

root@k8s-master01:~# kubectl create deployment demoapp --image=ikubernetes/demoapp:v1.0 --replicas=2
deployment.apps/demoapp created
root@k8s-master01:~# kubectl create service nodeport demoapp --tcp=80:80
service/demoapp created
root@k8s-master01:~# kubectl get svc -l app=demoapp  
NAME      TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
demoapp   NodePort   10.108.245.120   <none>        80:31608/TCP   16s
root@k8s-master01:~# curl http://10.1.1.11:31608
iKubernetes demoapp v1.0 !! ClientIP: 10.244.0.0, ServerName: demoapp-7c58cd6bb-48p2g, ServerIP: 10.244.1.2!
  • 9
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值