|kubeadm 是什么
根据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. 关闭防火墙
# 查看防火墙状态
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

|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
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
|卸载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