Ubuntu部署K8S

一、前言

本文介绍了Ubuntu 20.04上部署单master kubernetes,以供参考学习使用。自建K8S存在很多弊端,例如:单master(非高可用)不应用在生产环境,部署过程复杂,依赖网络,后期维护成本高,可视化界面和监控需要后期自行安装,扩展node需要人工干预,很难做到自动伸缩等等。解决建议见文末结束语。

OS:Ubuntu 20.04 server 64bit
Docker:v20.10.20
K8S组件:v1.23.9

二、资源规划

测试使用华为云ECS,规划如下:

ECS名称 规格 IP OS
ecs-k8s-master 4vCPUs | 8GiB 192.168.1.100 Ubuntu 20.04 server 64bit
ecs-k8s-node1 4vCPUs | 16GiB 192.168.1.101 Ubuntu 20.04 server 64bit
ecs-k8s-node2 4vCPUs | 16GiB 192.168.1.102 Ubuntu 20.04 server 64bit

Ubuntu部署K8S插图

三、K8S安装

配置基础环境(3台ECS都要执行):

##查ubuntu版本 lsb_release -a # 临时/永久关闭selinux setenforce 0 sed -i 's/enforcing/disabled/' /etc/selinux/config # 临时/永久关闭swap swapoff -a sed -ri 's/.*swap.*/#&/' /etc/fstab # 将桥接的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 # 在master添加hosts 根据实际自行修改 cat >> /etc/hosts << EOF 192.168.1.100 ecs-k8s-master 192.168.1.101 ecs-k8s-node1 192.168.1.102 ecs-k8s-node2 EOF #注意:这里要看一下/etc/hosts,把没用的都注释掉

注意:最后hosts根据自己实际情况进行配置。

Docker安装(3台ECS都要执行):

#更新软件包索引/列表 sudo apt update #安装Docker指定版本 apt-get install -y apt-transport-https ca-certificates curl software-properties-common #添加官网docker的GPG密钥 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - #设置stable存储库 add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" #更新apt源 apt-get update #查看docker-ce的版本 #apt-cache madison docker-ce #安装指定版本 apt-get -y install docker-ce=5:20.10.16~3-0~ubuntu-focal #查看Docker版本 docker -v #添加开机自启动 systemctl enable docker #修改Docker驱动方式 cat > /etc/docker/daemon.json << EOF { "exec-opts": ["native.cgroupdriver=systemd"] } EOF #重启Docker systemctl daemon-reload systemctl restart docker

安装K8S组件(3台ECS都要执行):

#使得 apt 支持 ssl 传输 apt-get update && apt-get install -y apt-transport-https # 下载 gpg 密钥(华为云) curl http://mirrors.huaweicloud.com/kubernetes/yum/doc/apt-key.gpg | apt-key add - # 添加 k8s 镜像源(华为云) cat <<EOF >/etc/apt/sources.list.d/kubernetes.list deb http://mirrors.huaweicloud.com/kubernetes/apt/ kubernetes-xenial main EOF # 更新源列表 apt-get update # 下载 kubectl,kubeadm以及 kubelet (node节点好像不需要安装kubectl) apt-get install -y kubelet=1.23.9-00 kubeadm=1.23.9-00 kubectl=1.23.9-00 #添加自启动 systemctl enable kubelet

master初始化(仅master服务器执行)

kubeadm init \ --apiserver-advertise-address=192.168.1.100 \ --image-repository registry.aliyuncs.com/google_containers \ --pod-network-cidr=10.244.0.0/16 \ --ignore-preflight-errors='all' #执行后会提示一些操作,都执行以下,最后能获得join命令 mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config export KUBECONFIG=/etc/kubernetes/admin.conf

各node节点执行kubeadm join(各node节点上执行)

kubeadm join 192.168.1.100:6443 --token ulie52.psrag7kcu2ubbp1j \ --discovery-token-ca-cert-hash sha256:b482698ad867aac0a48e4156a15f7dd39c42626fe82c258905987704711a129f

注意:上方命令仅是样例,真实的kubeadm join,请在上一步获得!

部署flannel网络(master服务器执行)

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

验证部署结果

kubectl get pod --all-namespaces kubectl get node

验证效果如下:

Ubuntu部署K8S插图1

四、使用验证(部署一个nginx)

# 创建nginx deployment $ kubectl create deployment nginx --image=nginx # 发布服务 $ kubectl expose deployment nginx --port=80 --type=NodePort # 伸缩 $ kubectl scale -n default deployment nginx --replicas=2 #查看pod和服务 $ kubectl get pods,svc #验证后清理 #删除服务 $ kubectl delete svc nginx # 删除 deployment $ kubectl delete deployment nginx

Ubuntu部署K8S插图2

访问:http://任意node节点EIP:端口号。

(端口号:就是上图红圈的位置,也就是NodePort的端口号)

结束语 :

至此,在Ubuntu上部署K8S就完成了,但是在这个过程可能会碰到各种问题,最容易碰到的问题就是网络问题,虽然K8S相关镜像源已经更换到了华为云镜像源,但是在部署flannel的时候,很有可能等待较长时间才能成功拉取镜像完成部署。以及后期会碰到kubeadm join token过期等问题。单master也不适合用在生产环境,UI界面和监控后期还要自己配置维护,较为麻烦。而我们期望的是部署维护的过程要简单,工作重点应当是工作负载的构建上。

在这里向大家推荐华为云CCE,它与自建K8S的优劣对比如下:

Ubuntu部署K8S插图3

本次测试相关云资源由天津市淘客科技有限公司提供

原文链接:https://blog.csdn.net/luckcxy/article/details/127407546

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享