Ubuntu下使用Kubeadm搭建k8s集群

|kubeadm 是什么

Kubeadm是官方推荐的最小化部署 Kubernetes 集群的最佳实践,不仅能部署Kubernetes集群,还能方便的管理集群,比如集群的升级、降级、集群初始化配置等操作。


Ubuntu下使用Kubeadm搭建k8s集群


|实验环境

根据Kubeadm文档有以下要求:

  • • 一台或多台运行兼容 deb/rpm 的 Linux 操作系统的计算机;例如:Ubuntu 或 CentOS。

  • • 每台机器2 GB 以上的内存,内存不足时应用会受限制。

  • • 用作控制平面节点的计算机上至少有 2 个 CPU

  • • 集群中所有计算机之间具有完全的网络连接。你可以使用公共网络或专用网络。


  • 本次实验配置如下:

系统:Ubuntu20.04

配置:4G内存,2核CPU

主机 ip 角色
k8smaster01 10.168.8.140 Master
k8snode01 10.168.8.142 Node
k8snode02 10.168.8.144 Node

|准备工作

  1. 1. 关闭防火墙

查看防火墙状态
sudo ufw status

关闭防火墙
sudo ufw disable

root@u20:~# sudo ufw status
状态:不活动

2. 关闭swap功能

#临时关闭swap
swapoff -a
#永久关闭
vim /etc/fstab
#将 /swap.img 注释掉 

root@u20:/etc/selinux# free -m
              总计         已用        空闲      共享    缓冲/缓存    可用
内存:        3901         531         123           1        3245        3089
交换:           0           0           0

3. 修改主机名称

sudo hostnamectl set-hostname k8smaster01
# 通过hostnamectl 工具修改 可直接使用hostnamectl 查看主机名称信息
# 另外两台主机分别修改为k8snode01,k8snode02

4. 修改hosts 将其他两个节点ip地址输进去(仅master节点需要设置)

vim /etc/hosts

10.168.8.140 k8smaster01
10.168.8.142 k8snode01
10.168.8.144 k8snode02

#
使配置生效
sudo /etc/init.d/networking restart

5. 将桥接的IPv4流量传递到iptables

cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF


#使配置生效
sysctl --system 

6.禁用SElinux功能&同步时间

#永久生效修改selinux:

vim /etc/selinux/config

SELINUX=enforceing #selinux开启

SELINUX=disabled #selinux禁用

#重启系统后生效


#也可以临时关闭

sudo etenforce 0      


# 安装ntpdata

sudo apt-get update

sudo apt-get install ntpdate


ntpdate time.windows.com
16 Sep 15:41:18 ntpdate[3934415]: adjust time server 20.189.79.72 offset -0.006557 sec

7. 下载kubectl kubelet kubeadm

#查询kubeadm的历史版本 
sudo apt-cache madison kubeadm
#这里指定v1.22.4版本
sudo apt-get install kubelet=1.22.4-00 kubectl=1.22.4-00 kubeadm=1.22.4-00
#设置开机启动kubelet
systemctl enable kubelet

8. 部署k8s Master节点

kubeadm init --apiserver-advertise-address=10.168.8.140 --kubernetes-version=v1.22.4 --image-repository registry.aliyuncs.com/google_containers --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=all --v=6
–apiserver-advertise-address  设置apiserver绑定的Ip,填的是Master主机ip地址
–image-repository 填的是阿里镜像
–service-cidr  指定service 的IP 范围 (默认 “10.96.0.0/12”)
–pod-network-cidr 指定 pod 的网络, control plane 会自动将网络发布到其他节点的node,让其上启动的容器使用此网络
–ignore-preflight-errors 忽略前置检查错误
执行完成后看到 Your Kubernetes control-plane has initialized successfully!表示Master节点初始化完成Ubuntu下使用Kubeadm搭建k8s集群

|kubeadm init完成后执行

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

|将Node节点加入集群

#在142和144机器执行下面这行指令
root@k8snode01:~# kubeadm join 10.168.8.140:6443 --token b5dgdn.r1hjffqra6l8h2fw 
         --discovery-token-ca-cert-hash sha256:16bc95ee72aa708297c21de1724291bd92d69798b7775e26d8eae8ac7e310be0

[preflight] Running pre-flight checks
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Starting the kubelet
[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...

This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.

Run 'kubectl get nodes' on the control-plane to see this node join the cluster.

|创建Token

Token默认时间为1天,过期后可以用一下指令重新生成。也可以生成一个永久Token。
kubeadm token create --print-join-command

kubeadm join 10.168.8.140:6443 --token t0ptzr.5q8h32rvvqwkrqgi --discovery-token-ca-cert-hash sha256:16bc95ee72aa708297c21de1724291bd92d69798b7775e26d8eae8ac7e310be0 

# 生成永久证书

kubeadm token create --ttl 0

#查看token列表
kubeadm token list

|加载CNI网络插件

root@k8smaster01:/home# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

namespace/kube-flannel created
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.apps/kube-flannel-ds created

|查看状态

当所有节点Status为Ready时说明集群搭建完成
root@k8smaster01:/home# kubectl get pods -n kube-system
NAME                                  READY   STATUS    RESTARTS   AGE
coredns-7f6cbbb7b8-84ggb              1/1     Running   0          63m
coredns-7f6cbbb7b8-m959g              1/1     Running   0          63m
etcd-k8smaster01                      1/1     Running   0          63m
kube-apiserver-k8smaster01            1/1     Running   0          63m
kube-controller-manager-k8smaster01   1/1     Running   0          63m
kube-proxy-dpzls                      1/1     Running   0          8m31s
kube-proxy-n8bzc                      1/1     Running   0          29m
kube-proxy-vtmhs                      1/1     Running   0          63m
kube-scheduler-k8smaster01            1/1     Running   0          63m

# 查看节点[都是ready状态]
root@k8smaster01:/home# kubectl get nodes
NAME          STATUS   ROLES                  AGE     VERSION
k8smaster01   Ready    control-plane,master   64m     v1.22.4
k8snode01     Ready    <none>                 30m     v1.22.4
k8snode02     Ready    <none>                 8m54s   v1.22.4

|运行Nginx

# 运行一个Nginx

kubectl create deployment nginx --image=nginx

# 暴露端口
kubectl expose deployment nginx --port=80 --type=NodePort
# 查看pod信息 并访问任意主机的32041端口
kubectl get pod,svc


Ubuntu下使用Kubeadm搭建k8s集群


Ubuntu下使用Kubeadm搭建k8s集群

|卸载k8s

运行哪有那么顺利,当出现各种解决不了的bug时删掉重新开始做是一个不错的选择。

kubeadm reset
sudo apt-get purge kubeadm kubectl kubelet kubernetes-cni kube*
sudo apt-get autoremove  

sudo rm -rf ~/.kube

# 完成后reboot重启


原文始发于微信公众号(ProgrammerHe):Ubuntu下使用Kubeadm搭建k8s集群

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/207972.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!