• 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名称规格IPOS
    ecs-k8s-master4vCPUs | 8GiB192.168.1.100Ubuntu 20.04 server 64bit
    ecs-k8s-node14vCPUs | 16GiB192.168.1.101Ubuntu 20.04 server 64bit
    ecs-k8s-node24vCPUs | 16GiB192.168.1.102Ubuntu 20.04 server 64bit

    三、K8S安装

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

    1. ##查ubuntu版本
    2. lsb_release -a
    3. # 临时/永久关闭selinux
    4. setenforce 0
    5. sed -i 's/enforcing/disabled/' /etc/selinux/config
    6. # 临时/永久关闭swap
    7. swapoff -a
    8. sed -ri 's/.*swap.*/#&/' /etc/fstab
    9. # 将桥接的IPv4流量传递到iptables的链
    10. cat > /etc/sysctl.d/k8s.conf << EOF
    11. net.bridge.bridge-nf-call-ip6tables = 1
    12. net.bridge.bridge-nf-call-iptables = 1
    13. EOF
    14. # 指定生效
    15. sysctl --system
    16. # 在master添加hosts 根据实际自行修改
    17. cat >> /etc/hosts << EOF
    18. 192.168.1.100 ecs-k8s-master
    19. 192.168.1.101 ecs-k8s-node1
    20. 192.168.1.102 ecs-k8s-node2
    21. EOF
    22. #注意:这里要看一下/etc/hosts,把没用的都注释掉

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

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

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

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

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

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

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

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

    1. kubeadm join 192.168.1.100:6443 --token ulie52.psrag7kcu2ubbp1j \
    2. --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

    验证部署结果

    1. kubectl get pod --all-namespaces
    2. kubectl get node

    验证效果如下: 

     

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

    1. # 创建nginx deployment
    2. $ kubectl create deployment nginx --image=nginx
    3. # 发布服务
    4. $ kubectl expose deployment nginx --port=80 --type=NodePort
    5. # 伸缩
    6. $ kubectl scale -n default deployment nginx --replicas=2
    7. #查看pod和服务
    8. $ kubectl get pods,svc
    9. #验证后清理
    10. #删除服务
    11. $ kubectl delete svc nginx
    12. # 删除 deployment
    13. $ kubectl delete deployment nginx

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

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

    结束语 :

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

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

     

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

     

  • 相关阅读:
    数据库基础
    MySQL 事务的底层原理和 MVCC(二)
    ArcGIS Maps SDK for JS:dojo/on 模块监听按钮的各种事件
    es6的核心语法
    什么是yum源?如何对其进行配置?
    Dart(8)-流程控制
    定义爬虫规则和数据存储
    Spring | 事件监听器应用与最佳实践
    三言两语说软件架构演变
    数据建模中利用3σ剔除异常值进行数据清洗
  • 原文地址:https://blog.csdn.net/luckcxy/article/details/127407546