• CentOS脚本快速部署K8S


    一、前言

    本文介绍了CentOS 7.6 64bit上使用脚本部署单master  kubernetes,CentOS 7 将在2024年停止支持,本文仅供参考学习,勿用于生产环境。

    二、资源规划

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

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

    OS:CentOS 7.6 64bit
    Docker:v18.06.1
    K8S组件:v1.18.6

     

    三、环境配置及组件安装(脚本)

    1. #!/bin/bash
    2. #################################################################################
    3. # 作者:cxy-2022-10-20
    4. # 功能:搭建K8S运行环境
    5. #
    6. #################################################################################
    7. echo "1、基础环境配置..."
    8. ##查版本
    9. lsb_release -a
    10. # 关闭防火墙
    11. systemctl disable firewalld
    12. systemctl stop firewalld
    13. # 临时/永久关闭selinux
    14. setenforce 0
    15. sed -i 's/SELINUX=permissive/SELINUX=disabled/' /etc/sysconfig/selinux
    16. sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
    17. # 临时/永久关闭swap
    18. swapoff -a
    19. sed -ri 's/.*swap.*/#&/' /etc/fstab
    20. # 将桥接的IPv4流量传递到iptables的链
    21. cat > /etc/sysctl.d/k8s.conf << EOF
    22. net.bridge.bridge-nf-call-ip6tables = 1
    23. net.bridge.bridge-nf-call-iptables = 1
    24. EOF
    25. # 指定生效
    26. sysctl --system
    27. # 在master添加hosts 根据实际自行修改
    28. cat >> /etc/hosts << EOF
    29. 192.168.1.100 ecs-k8s-master
    30. 192.168.1.101 ecs-k8s-node1
    31. 192.168.1.102 ecs-k8s-node2
    32. EOF
    33. #注意:这里要看一下/etc/hosts,把没用的都注释掉
    34. echo "2、安装Docker(v18.06.1)..."
    35. # 查找想要安装的版本
    36. # yum list docker-ce.x86_64 --showduplicates | sort -r
    37. # 华为云镜像源
    38. wget https://mirrors.huaweicloud.com/docker-ce/linux/centos/docker-ce.repo -O/etc/yum.repos.d/docker-ce.repo
    39. # yum安装
    40. yum -y install docker-ce-18.06.1.ce-3.el7
    41. # 启动、开机自启动
    42. systemctl enable docker && systemctl start docker
    43. #查看Docker版本
    44. docker -v
    45. #修改Docker驱动方式
    46. cat > /etc/docker/daemon.json << EOF
    47. {
    48. "exec-opts": ["native.cgroupdriver=systemd"]
    49. }
    50. EOF
    51. #重启Docker
    52. systemctl daemon-reload
    53. systemctl restart docker
    54. echo "3、安装K8S组件(v1.23.9)"
    55. #使得 apt 支持 ssl 传输
    56. yum install -y apt-transport-https
    57. #添加yum源--华为
    58. cat <<EOF > /etc/yum.repos.d/kubernetes.repo
    59. [kubernetes]
    60. name=Kubernetes
    61. baseurl=https://mirrors.huaweicloud.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
    62. enabled=1
    63. gpgcheck=1
    64. repo_gpgcheck=1
    65. gpgkey=http://mirrors.huaweicloud.com/kubernetes/yum/doc/yum-key.gpg
    66. http://mirrors.huaweicloud.com/kubernetes/yum/doc/rpm-package-key.gpg
    67. EOF
    68. # 下载 kubectl,kubeadm以及 kubelet (node节点好像不需要安装kubectl)
    69. yum install -y kubectl-1.18.6 kubelet-1.18.6 kubeadm-1.18.6
    70. #启动并添加自启动
    71. systemctl enable kubelet && systemctl start kubelet

    上方脚本,在所有ECS(1master、2node)上均要执行。

     

     

    后续操作

    1. #master初始化(master服务器上执行)
    2. kubeadm init \
    3. --apiserver-advertise-address=192.168.1.100 \
    4. --image-repository registry.aliyuncs.com/google_containers \
    5. --pod-network-cidr=10.244.0.0/16 \
    6. --ignore-preflight-errors='all'
    7. #安装成功后,会有提示,执行相关命令(master服务器上执行)
    8. mkdir -p $HOME/.kube
    9. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    10. sudo chown $(id -u):$(id -g) $HOME/.kube/config
    11. #创建不过期的token(master服务器上执行)
    12. kubeadm token create --print-join-command --ttl=0
    13. #执行后,会出现一段kubeadm join命令(在各node节点上执行)
    14. kubeadm join 192.168.1.100:6443 --token 1quug2.vpr4iaooy6bd61aj --discovery-token-ca-cert-hash sha256:0d07dd62fca5d34e31b558247789b2623ceeebd42bb4440b53a4025d290c58fd
    15. #注意上方命令仅是示例,要执行的是kubeadm token create后服务器打印的命令!
    16. #部署flannel网络(master服务器执行)
    17. kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

    安装成功提示,及后续需要执行的命令。 

    node节点加入成功。

    执行红框中的命令。 

     

    验证部署结果

    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的优劣对比如下:

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

  • 相关阅读:
    Java 开源开发平台 O2OA V7.2.0 发布,新增系统配置图形化模块和企业文件模块!
    ASP.NET内置对象
    基于JavaWeb+SSM+社区居家养老服务平台—颐养者端微信小程序系统的设计和实现
    Bug战场:C++篇
    R语言作图——Heatmap(热图)
    汽车音响静音检测电路芯片D3703F,适用于汽车音响系统,采用封装形式SOP8
    easyui disabled 属性设置
    UE4 WebUI插件使用指南
    解决Pycharm使用Conda激活环境失败的问题
    HarmonyOS 监听软键盘key
  • 原文地址:https://blog.csdn.net/luckcxy/article/details/127419538