Ubuntu部署K8S

举报
云叔记 发表于 2022/10/19 18:26:40 2022/10/19
【摘要】 K8S(Kubernetes) 是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。

一、前言

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

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


二、资源规划

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

image.png


三、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'
 
#执行后会提示一些操作,都执行以下,最后能获得kubeadm 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

注意:apiserver-advertise-address 更换成自己的master的ip

各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

#查看各node节点状态
kubectl get node

验证效果如下:

k8s检测node和pod.png

四、使用验证(部署一个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

验证效果如下:

k8s-nginx.png

访问:http://任意node节点EIP:端口号。(端口号:就是上图红圈的位置,也就是NodePort的端口号)

结束语 :

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

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

image.png

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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。