zoukankan      html  css  js  c++  java
  • 使用kubeadm快速部署一个kubernetes集群

    Kubeadm 是一个创建和管理 Kubernetes 集群的工具。

    1、安装需求

    • 一台或多台运行着下列系统的机器:
      • Ubuntu 16.04+
      • Debian 9+
      • CentOS 7
      • Red Hat Enterprise Linux (RHEL) 7
      • Fedora 25+
      • HypriotOS v1.0.1+
      • Container Linux (测试 1800.6.0 版本)
    • 每台机器 2 GB 或更多的 RAM (如果少于这个数字将会影响您应用的运行内存)
    • 2 核 CPU 或更多,硬盘30GB或更多。
    • 集群中的所有机器的网络彼此均能相互连接(公网和内网都可以)
    • 节点之中不可以有重复的主机名、MAC 地址或 product_uuid。
    • 禁用交换分区。

    2、准备开始

    我用 VMware 创建了三台 Centos7 虚拟机,每台虚拟机添加了两块网卡,一块网卡用于集群内部之间的通信,一块网卡用于连接到互联网下载软件和拉取镜像。内网 IP 规划如下:

    角色 IP
    k8s-master 192.168.66.10
    k8s-node01 192.168.66.20
    k8s-node02 192.168.66.21

    3、系统初始化

    • 关闭防火墙
    # systemctl stop firewalld && systemctl disable firewalld
    • 关闭 swap
     # swapoff -a && sed -i '/ swap / s/^(.*)$/#1/g' /etc/fstab
    • 关闭 selinux
     # setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/
    • 设置 hostname
     # hostnamectl  set-hostname  k8s-master
    • 添加 hosts
    # cat >> /etc/hosts << EOF
    192.168.66.10 k8s-master
    192.168.66.20 k8s-node1
    192.168.66.21 k8s-node2
    EOF
    • 调整内核参数
     # cat > /etc/sysctl.d/kubernetes.conf <<EOF
     net.bridge.bridge-nf-call-iptables=1    
     net.bridge.bridge-nf-call-ip6tables=1    
     EOF
     
     # sysctl -p /etc/sysctl.d/kubernetes.conf    
    • 开启 ipvs
    modprobe用来加载或移除内核模块
    # modprobe br_netfilter
    
    # cat > /etc/sysconfig/modules/ipvs.modules <<EOF
    #!/bin/bash
    modprobe -- ip_vs
    modprobe -- ip_vs_rr
    modprobe -- ip_vs_wrr
    modprobe -- ip_vs_sh
    modprobe -- nf_conntrack_ipv4
    EOF
    
    # chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv

    4、Docker/Kubeadm/Kubelet/Kubectl的部署安装

    4.1、安装 Docker

    添加阿里YUM源
    # yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
    # yum update -y && yum install -y docker-ce
    
    配置镜像仓库
    # cat > /etc/docker/daemon.json << EOF
    {
      "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
    }
    EOF
    
    重启docker
    systemctl daemon-reload && systemctl restart docker && systemctl enable docker

    4.2、安装Kubeadm、Kubectl、Kubelet

    添加阿里云yum软件源
    # cat > /etc/yum.repos.d/kubernetes.repo << EOF
    [kubernetes]
    name=Kubernetes
    baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
    enabled=1
    gpgcheck=0
    repo_gpgcheck=0
    gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    EOF
    # yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0
    # systemctl enable kubelet

    5、主节点集群初始化

    # kubeadm init 
      --apiserver-advertise-address=192.168.66.10 
      --image-repository registry.aliyuncs.com/google_containers 
      --kubernetes-version v1.18.0 
      --service-cidr=10.96.0.0/12 
      --pod-network-cidr=10.244.0.0/16
    • --apiserver-advertise-address:主节点IP
    • --image-repository registry.aliyuncs.com/google_containers:默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址
    • --service-cidr=10.96.0.0/12:service的clusterIP地址范围
    • --pod-network-cidr=10.244.0.0/16:pod的IP地址范围,后面我们会安装网络插件Calico,10.244.0.0/16为Calico默认地址,这里设置和Calico保持一致

    初始化完成后,会有如下日志提示,安装提示执行命令

    # mkdir -p $HOME/.kube
    # sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    # sudo chown $(id -u):$(id -g) $HOME/.kube/config

     5.1、为 kube-proxy 开启 ipvs

    # kubectl edit cm kube-proxy -n kube-system

    把其中的 mode 改为 ipvs

    ......
        kind: KubeProxyConfiguration
        metricsBindAddress: ""
        mode: "ipvs"
        nodePortAddresses: null
        oomScoreAdj: null
        portRange: ""
    ......
    # kubectl get pod -n kube-system | grep kube-proxy |awk '{system("kubectl delete pod "$1" -n kube-system")}'

    6、加入节点

    在节点上执行,主节点 kubeadm init 后打印的 kubeadm join 命令

    # kubeadm join 192.168.66.10:6443 --token esce21.q6hetwm8si29qxwn 
        --discovery-token-ca-cert-hash sha256:00603a05805807501d7181c3d60b478788408cfe6cedefedb1f97569708be9c5

    如果忘了 token 或者 token 过期不可用了,可执行如下命令重新生成

    # kubeadm token create
    # kubeadm token list
    # openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
    63bca849e0e01691ae14eab449570284f0c3ddeea590f8da988c07fe2729e924
    
    # kubeadm join 192.168.66.10:6443 --token nuja6n.o3jrhsffiqs9swnu --discovery-token-ca-cert-hash sha256:63bca849e0e01691ae14eab449570284f0c3ddeea590f8da988c07fe2729e924

    7、安装 Calico 网络插件

    先把资源清单下载下来

    # wget https://docs.projectcalico.org/manifests/calico.yaml

    修改如下配置

    • CALICO_IPV4POOL_CIDR:根据主节点初始化修改Pod CIDR
    • CALICO_IPV4POOL_IPIP:选择 IPIP 工作模式
    ......
               - name: CALICO_IPV4POOL_CIDR
                  value: "10.244.0.0/16"
    ......
                # Enable IPIP
                - name: CALICO_IPV4POOL_IPIP
                  value: "Always"

    8、测试集群

    查看节点,Calico 安装成功后,master 的状态会变成 Ready

    节点成功加入,节点状态是 Ready

    # kubectl get nodes
    NAME     STATUS     ROLES    AGE     VERSION
    master   Ready      master   3d20h   v1.18.1
    node01   NotReady   <none>   3d20h   v1.18.0
    node02   NotReady   <none>   3d14h   v1.18.0

    创建一个 deployment

    # kubectl create deployment nginx --image=nginx
    # kubectl expose deployment nginx --port=80
    # kubectl get pod,svc

    查看服务是否能访问
    curl Cluster-Ip
  • 相关阅读:
    IOS第一天
    Mac环境下svn的使用
    惯用代码
    ORA-12170: TNS: 连接超时
    java字符集
    java移位运算
    mysql面试题
    mysql覆盖索引(屌的狠,提高速度)
    Cannot call sendError() after the response has been committed
    maven生命周期
  • 原文地址:https://www.cnblogs.com/wufj/p/14214021.html
Copyright © 2011-2022 走看看