ubuntu快速安装K8s1.27
- (一)环境说明
- 1.硬件环境
- 2.Ubuntu环境设置
- (二)安装配置containerd
- 1.安装
- 2.配置
- 3.启动
- (三)所有节点操作
- 1.安装runc和cni
- 2.节点系统设置、关闭临时分区
- 3.修改内核参数
- 4.安装 kubeadm、kubectl、kubelet
- (四)初始化k8s(master节点)
- 1.生成配置脚本
- 2.拉取需要的脚本
- 3. 初始化主节点
- (五)在node节点上
- (六)启动K8s(1.27)
- 1.启动master和node节点
- 2.网络插件Calico
- 3.进入Kuboard
可以与这篇文章在centos快速搭建K8S1.18集群进行对比安装,centos是通过kubeadm工具安装K8s1.18,Ubuntu安装1.27是通过配置containerd安装K8s.
(一)环境说明
1.硬件环境
虚拟机硬件规格:2CPU 40GB
虚拟机数量: 3台
虚拟机操作系统:ubuntu-22.04.3-live-server-amd64.iso
操作系统 | 主机名 | IP |
---|---|---|
ubuntu-22.04.3 | k8s-master | 10.0.0.150 |
ubuntu-22.04.3 | k8s-node1 | 10.0.0.151 |
ubuntu-22.04.3 | k8s-node2 | 10.0.0.152 |
2.Ubuntu环境设置
2.1设置root用户密码
配置网络输入命令
# view /etc/netplan/00-installer-config.yaml
具体配置可以参考此博客网络配置——以Xubuntu为例
输入命令:netplan apply(检测ip是否改过来了)
检查sshd服务是否开始(active是开启状态)
2.2先以master为例配置主机名
sshd的服务已开启进行远程连接,以leyi普通用户进入来登入root用户
设置静态名称解析,考虑到后续会使用 node2 作为 nfs 服务器,此处预先做好名称解析,
输入如下指令:
cat >> /etc/hosts << EOF
10.0.0.150 k8s-master
10.0.0.151 k8s-node1
10.0.0152 k8s-node2
EOF
检测:
通过命令:
ping k8s-master
ping k8s-node1
ping k8s-node2
来测试是否设置好静态名称解析
或者通过指令: 查看cat /etc/hosts 文件里是否有三个指令
(二)安装配置containerd
1.安装
可以通过本地上传文件(评论区获取)或者通过github网站上获取并解压
# wget https://github.com/containerd/containerd/releases/download/v1.7.0/containerd-1.7.0-linux-amd64.tar.gz
# tar Cxzvf /usr/local containerd-1.7.0-linux-amd64.tar.gz
2.配置
创建启动containerd的systemd服务
# cat << EOF >> /lib/systemd/system/containerd.service
[Unit]
Description=containerd container runtime
Documentation=https://containerd.io
After=network.target local-fs.target
[Service]
ExecStartPre=-/sbin/modprobe overlay
ExecStart=/usr/local/bin/containerd
Type=notify
Delegate=yes
KillMode=process
Restart=always
RestartSec=5
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNPROC=infinity
LimitCORE=infinity
LimitNOFILE=infinity
# Comment TasksMax if your systemd version does not supports it.
# Only systemd 226 and above support this version.
TasksMax=infinity
OOMScoreAdjust=-999
[Install]
WantedBy=multi-user.target
EOF
3.启动
containerd服务开机自启
# systemctl daemon-reload
# systemctl enable --now containerd
# systemctl status containerd
3.5配置containerd的配置文件,并启动containerd服务
# mkdir -p /etc/containerd
# containerd config default | tee /etc/containerd/config.toml
# str1="registry.k8s.io/pause:3.8"
# str2="registry.aliyuncs.com/google_containers/pause:3.9"
# sed -i "/sandbox_image/ s%${str1}%${str2}%g" /etc/containerd/config.toml
# sed -i '/SystemdCgroup/ s/false/true/g' /etc/containerd/config.toml
# systemctl restart containerd && systemctl status containerd
(三)所有节点操作
1.安装runc和cni
快捷步骤
# install -m 755 runc.amd64 /usr/local/sbin/runc
# mkdir -p /opt/cni/bin
# tar xf /home/leyi/cni-plugins-linux-amd64-v1.1.1.tgz -C /opt/cni/bin/
2.节点系统设置、关闭临时分区
swapoff -a(关闭所有swap分区),因为在部署kubernetes要求不适用swap分区,
sed -i '/swap/ s%/swap%#/swap%g' /etc/fstab
(寻找swap行将swap替换成#swap)
这个操作的意思是将 /swap 替换为 #/swap,用 "#" 注释掉 swap 相关的行,防止系统在启动时自动挂载 swap 分区。
3.修改内核参数
# modprobe overlay
# modprobe br_netfilter
# cat <<EOF >> /etc/modules-load.d/k8s.conf overlay br_netfilter EOF
# cat <<EOF >> /etc/sysctl.d/k8s.conf
# net.bridge.bridge-nf-call-ip6tables = 1
# net.bridge.bridge-nf-call-iptables = 1
# net.ipv4.ip_forward = 1 EOF
# sysctl --system
4.安装 kubeadm、kubectl、kubelet
7.1更新apt源,添加国内aliyun源
# apt-get update && apt-get install -y apt-transport-https ca-certificates
# curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
# cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
> deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main EOF
apt-get update
> EOF
7.2以安装 1.27.0为例
# apt install -y kubelet=1.27.0-00 kubeadm=1.27.0-00 kubectl=1.27.0-00
7.3设置 kubelet 自动启动
# systemctl enable kubelet
7.4禁止更新(可选)
# apt-mark hold kubelet kubeadm kubectl
# systemctl enable --now kubelet
到这里的k8s-master完成后开始克隆操作,克隆出k8s-node1和k8s-node以及更改主机名更改ip地址node1是(10.0.0.151)、node2是(10.0.0.152),之后进行分节点操作。
(四)初始化k8s(master节点)
1.生成配置脚本
//生成文件
[root@k8s-master ~]# kubeadm config print init-defaults > kubeadm.yaml
[root@k8s-master ~]# vim kubeadm.yaml
vim中编辑进入
apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:
- system:bootstrappers:kubeadm:default-node-token
token: abcdef.0123456789abcdef
ttl: 24h0m0s
usages:
- signing
- authentication
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: 10.0.0.150
bindPort: 6443
nodeRegistration:
criSocket: unix:///var/run/containerd/containerd.sock
imagePullPolicy: IfNotPresent
name: k8s-master
taints: null
---
apiServer:
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:
local:
dataDir: /var/lib/etcd
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: 1.27.0
networking:
dnsDomain: cluster.local
podSubnet: 10.244.0.0/16
serviceSubnet: 10.96.0.0/12
scheduler: {}
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd
2.拉取需要的脚本
//初始化apiserver等依赖镜像
[root@k8s-master ~]# kubeadm config images pull --config=kubeadm.yaml
3. 初始化主节点
//初始化k8s 服务器起码2C,否则报错
[root@k8s-master ~]# kubeadm init --config kubeadm.yaml | tee kubeadm-init.log
标黄(生成了一串用于添加node节点到master节点上的指令,单独复制出来后续node操作需要用到)
执行如下指令:
[root@k8s-master ~]# mkdir -p $HOME/.kube
[root@k8s-master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@k8s-master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
[root@k8s-master ~]# export KUBECONFIG=/etc/kubernetes/admin.conf
检查节点
[root@k8s-master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master NotReady control-plane,master 8m20s v1.27.0
将.kube/config leyi@k8s-node1(/k8s-node2):/home/leyi (将.kube文件下的config文件传输到k8s-node1的家目录下)
(五)在node节点上
查看文件是否传输过来,并创建mkdir -p $HOME/.kube目录,并将家目录下的config文件复制到.kube文件下(两个节点都是如此操作)
将上面初始化主节点的标黄指令,复制到node1和node2中执行
(六)启动K8s(1.27)
1.启动master和node节点
//在master节点上输入
# kubectl get nodes
可以看到已经将node1和node2节点添加进来了
而表示该节点没有运行,状态也是NotReady
//设置节点标签
# kubectl get nodes --show-labels
//设置完节点标签,再次输入如下命令查看,能看到roles成了< work >
# kubectl get nodes
// 设置标签
kubectl label nodes k8s-node1 node-role.kubernetes.io/work=work
kubectl label nodes k8s-node2 node-role.kubernetes.io/work=work
//设置完标签,再次输入如下命令查看,能看到STATUS成了< Ready >
# kubectl get nodes
2.网络插件Calico
//使用kubectl安装kube
# kubectl apply -f calico.yaml
3.进入Kuboard
到这里节点都run且ready的状态,那我们就可以进入http://10.0.0.150/
用户名: admin
密 码: Kuboard123
创建一个集群k8s: