zoukankan      html  css  js  c++  java
  • 利用kubeadm工具安装Kubernetes1.15版本

    一键安装的脚本已经不少了,但是手动安装一遍感觉更能体会一下kubernetes的架构。参考的安装脚本和信息在本文最后列出。


    ###安装前检查与预配置
    • CentOS 7.

    • 2 GB or more of RAM per machine (any less will leave little room for your apps).

    • 2 CPUs or more.(CPU少于2个,会有错误提示,初始化时忽略就可以)

    • Full network connectivity between all machines in the cluster (public or private network is fine).

    • Unique hostname, MAC address, and product_uuid for every node.

      • You can get the MAC address of the network interfaces using the command ip link or ifconfig -a
      • The product_uuid can be checked by using the command sudo cat /sys/class/dmi/id/product_uuid
    • Certain ports are open on your machines.

      • Control-plane node(s)

        Protocol Direction Port Range Purpose Used By
        TCP Inbound 6443 Kubernetes API server All
        TCP Inbound 2379-2380 etcd server client API kube-apiserver, etcd
        TCP Inbound 10250 Kubelet API Self, Control plane
        TCP Inbound 10251 kube-scheduler Self
        TCP Inbound 10252 kube-controller-manager Self
      • Worker node(s)

        Protocol Direction Port Range Purpose Used By
        TCP Inbound 10250 Kubelet API Self, Control plane
        TCP Inbound 30000-32767 NodePort Services All
    • Set SELinux in permissive mode (effectively disabling it).(我的云服务器默认已经是关闭状态了)

      This is required to allow containers to access the host filesystem, which is needed by pod networks for example. You have to do this until SELinux support is improved in the kubelet.

      setenforce 0
      cp -p /etc/selinux/config /etc/selinux/config.bak$(date '+%Y%m%d%H%M%S')
      sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
      
    • Setup iptables (routing).

      Some users on RHEL/CentOS 7 have reported issues with traffic being routed incorrectly due to iptables being bypassed.

      cat <<EOF >  /etc/sysctl.d/k8s.conf
      net.bridge.bridge-nf-call-ip6tables = 1
      net.bridge.bridge-nf-call-iptables = 1
      net.bridge.bridge-nf-call-arptables = 1
      EOF
      sysctl --system
      
    • Swap disabled. You MUST disable swap in order for the kubelet to work properly.

      swapoff -a
      cp -p /etc/fstab /etc/fstab.bak$(date '+%Y%m%d%H%M%S')
      sed -i "s//dev/mapper/rhel-swap/#/dev/mapper/rhel-swap/g" /etc/fstab
      sed -i "s//dev/mapper/centos-swap/#/dev/mapper/centos-swap/g" /etc/fstab
      mount -a
      free -m
      cat /proc/swaps
      

    最好关闭防火墙,否则可能在某一步出现问题,不好排查:

    systemctl stop firewalld
    systemctl disable firewalld
    

    安装Container runtime—Docker

    在CentOS7中使用yum安装方式如下:

    # step 1: 安装必要的一些系统工具
    sudo yum install -y yum-utils device-mapper-persistent-data lvm2
    # Step 2: 添加软件源信息
    sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    # Step 3: 更新并安装 Docker-CE
    sudo yum makecache fast
    sudo yum install docker-ce-18.06.2.ce-3.el7
    # Step 4: 开启Docker服务
    sudo systemctl enable docker
    sudo systemctl start docker
    # Step 5: 配置镜像加速器
    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://lnxo5xh2.mirror.aliyuncs.com"]
    }
    EOF
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    

    安装kubeadm,kubelet和kubectl

    # step 1: 添加软件源信息
    cat <<EOF > /etc/yum.repos.d/kubernetes.repo
    [kubernetes]
    name=Kubernetes
    baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
    enabled=1
    gpgcheck=1
    repo_gpgcheck=1
    gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    EOF
    # Step 3: 更新并安装 kubelet kubeadm kubectl
    yum clean all
    yum makecache -y
    yum repolist all
    setenforce 0
    yum install -y kubelet kubeadm kubectl
    systemctl enable kubelet && systemctl start kubelet
    

    初始化控制平面节点

    拉取初始化所需镜像(这些镜像我是通过在dockerhub上下载然后docker tag自己打的对应标签)
    通过kubeadm config images list可以查看对应kubeadm版本的初始化镜像,我整理如下,其中最后一个镜像是用于通信的flannel插件

    k8s.gcr.io/kube-apiserver:v1.15.0
    k8s.gcr.io/kube-controller-manager:v1.15.0
    k8s.gcr.io/kube-scheduler:v1.15.0
    k8s.gcr.io/kube-proxy:v1.15.0
    k8s.gcr.io/pause:3.1
    k8s.gcr.io/etcd:3.3.10
    k8s.gcr.io/coredns:1.3.1
    quay.io/coreos/flannel:v0.11.0-amd64  #pod通信使用的插件
    

    初始化控制平面节点

    sudo kubeadm init --kubernetes-version=v1.15.0 --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=NumCPU
    

    初始化成功后,最后会提示如下信息,方便普通用户使用kubernetes。同时kubeadm join处信息,可以添加node节点。

    Your Kubernetes control-plane has initialized successfully!
    
    To start using your cluster, you need to run the following as a regular user:
    
      mkdir -p $HOME/.kube
      sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
      sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
    You should now deploy a pod network to the cluster.
    Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
      https://kubernetes.io/docs/concepts/cluster-administration/addons/
    
    Then you can join any number of worker nodes by running the following on each as root:
    
    kubeadm join 172.17.17.59:6443 --token khk4ig.sjz142bi0xxxxxxx 
        --discovery-token-ca-cert-hash sha256:1f6b9a1a675188cd76b97e9050f7343a361adxxxxxxxxxxxxxxxx
    

    安装pod网络附加组件

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

    安装了pod网络后,您可以通过在``kubectl get pods --all-namespaces`的输出中检查CoreDNS pod正在运行来确认它是否正常工作。一旦CoreDNS pod启动并运行,您可以继续加入您的节点。

    控制平面节点加入工作节点中(默认master节点不参加工作负载。因为是自己玩,只有一个服务器,所以将master节点当作工作节点)

    kubectl taint nodes --all node-role.kubernetes.io/master-
    

    有欠妥之处,欢迎交流讨论~~

    参考文档

    1. Installing kubeadm
    2. Creating a single control-plane cluster with kubeadm
    3. 使用kubeadm一键部署kubernetes集群 v1.10.3 v1.11.0 v1.13.0
    4. kubeadm安装kubernetes1.13集群
  • 相关阅读:
    Jenkins发布.Net Core项目到IIS
    2019 SDN上机第2次作业
    2019 SDN上机第1次作业
    第二次结对编程作业
    第3组 团队展示
    第一次结对编程作业
    第一次个人编程作业
    第一次博客作业
    android json解析及简单例子
    详述Google针对Android平板App发布的十大开发准则
  • 原文地址:https://www.cnblogs.com/hati/p/11110249.html
Copyright © 2011-2022 走看看