zoukankan      html  css  js  c++  java
  • CentOS部署Kubernetes1.13集群-1(使用kubeadm安装K8S)

    参考:https://www.kubernetes.org.cn/4956.html

    1.准备

    说明:准备工作需要在集群所有的主机上执行


    1.1系统配置

    在安装之前,需要先做如下准备。三台CentOS主机如下:

    cat /etc/hosts
    192.168.0.19 tf-01
    192.168.0.20 tf-02
    192.168.0.21 tf-03
    

    如果各个主机启用了防火墙,需要开放Kubernetes各个组件所需要的端口,可以查看Installing kubeadm中的”Check required ports”一节。 这里简单起见在各节点禁用防火墙:

    systemctl stop firewalld
    systemctl disable firewalld
    

    禁用SELINUX:

    setenforce 0
    
    vi /etc/selinux/config
    SELINUX=disabled
    

    创建/etc/sysctl.d/k8s.conf文件,添加如下内容:

    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    net.ipv4.ip_forward = 1
    

    执行命令使修改生效。

    modprobe br_netfilter
    sysctl -p /etc/sysctl.d/k8s.conf
    

    1.2kube-proxy开启ipvs的前置条件

       由于ipvs已经加入到了内核的主干,所以为kube-proxy开启ipvs的前提需要加载以下的内核模块:

    ip_vs
    ip_vs_rr
    ip_vs_wrr
    ip_vs_sh
    nf_conntrack_ipv4

    在所有的Kubernetes节点上执行以下脚本:
    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_ipv4
    

    上面脚本创建了的/etc/sysconfig/modules/ipvs.modules文件,保证在节点重启后能自动加载所需模块。

    使用lsmod | grep -e ip_vs -e nf_conntrack_ipv4命令查看是否已经正确加载所需的内核模块。

    lsmod | grep -e ip_vs -e nf_conntrack_ipv4
    

    接下来还需要确保各个节点上已经安装了ipset软件包yum install ipset。 为了便于查看ipvs的代理规则,最好安装一下管理工具ipvsadm yum install ipvsadm。

    yum install ipset

    ipvsadm yum install ipvsadm

    如果以上前提条件如果不满足,则即使kube-proxy的配置开启了ipvs模式,也会退回到iptables模式

    1.3安装Docker

    Kubernetes从1.6开始使用CRI(Container Runtime Interface)容器运行时接口。默认的容器运行时仍然是Docker,使用的是kubelet中内置dockershim CRI实现。

    安装docker的yum源:

    yum install -y yum-utils device-mapper-persistent-data lvm2
    yum-config-manager 
        --add-repo 
        https://download.docker.com/linux/centos/docker-ce.repo
    

    查看最新的Docker版本:

    yum list docker-ce.x86_64  --showduplicates |sort -r
    docker-ce.x86_64            3:18.09.0-3.el7                     docker-ce-stable
    docker-ce.x86_64            18.06.1.ce-3.el7                    docker-ce-stable
    docker-ce.x86_64            18.06.0.ce-3.el7                    docker-ce-stable
    docker-ce.x86_64            18.03.1.ce-1.el7.centos             docker-ce-stable
    docker-ce.x86_64            18.03.0.ce-1.el7.centos             docker-ce-stable
    docker-ce.x86_64            17.12.1.ce-1.el7.centos             docker-ce-stable
    docker-ce.x86_64            17.12.0.ce-1.el7.centos             docker-ce-stable
    docker-ce.x86_64            17.09.1.ce-1.el7.centos             docker-ce-stable
    docker-ce.x86_64            17.09.0.ce-1.el7.centos             docker-ce-stable
    docker-ce.x86_64            17.06.2.ce-1.el7.centos             docker-ce-stable
    docker-ce.x86_64            17.06.1.ce-1.el7.centos             docker-ce-stable
    docker-ce.x86_64            17.06.0.ce-1.el7.centos             docker-ce-stable
    docker-ce.x86_64            17.03.3.ce-1.el7                    docker-ce-stable
    docker-ce.x86_64            17.03.2.ce-1.el7.centos             docker-ce-stable
    docker-ce.x86_64            17.03.1.ce-1.el7.centos             docker-ce-stable
    docker-ce.x86_64            17.03.0.ce-1.el7.centos             docker-ce-stable
    

    Kubernetes 1.12已经针对Docker的1.11.1, 1.12.1, 1.13.1, 17.03, 17.06, 17.09, 18.06等版本做了验证,需要注意Kubernetes 1.12最低支持的Docker版本是1.11.1。Kubernetes 1.13对Docker的版本依赖方面没有变化。 我们这里在各节点安装docker的18.06.1版本。

    yum makecache fast
    
    yum install -y --setopt=obsoletes=0 
      docker-ce-18.06.1.ce-3.el7
    
    systemctl start docker
    systemctl enable docker
    

    确认一下iptables filter表中FOWARD链的默认策略(pllicy)为ACCEPT。

    iptables -nvL
    Chain INPUT (policy ACCEPT 263 packets, 19209 bytes)
     pkts bytes target     prot opt in     out     source               destination
    
    Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
     pkts bytes target     prot opt in     out     source               destination
        0     0 DOCKER-USER  all  --  *      *       0.0.0.0/0            0.0.0.0/0
        0     0 DOCKER-ISOLATION-STAGE-1  all  --  *      *       0.0.0.0/0            0.0.0.0/0
        0     0 ACCEPT     all  --  *      docker0  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
        0     0 DOCKER     all  --  *      docker0  0.0.0.0/0            0.0.0.0/0
        0     0 ACCEPT     all  --  docker0 !docker0  0.0.0.0/0            0.0.0.0/0
        0     0 ACCEPT     all  --  docker0 docker0  0.0.0.0/0            0.0.0.0/0
    

    Docker从1.13版本开始调整了默认的防火墙规则,禁用了iptables filter表中FOWARD链,这样会引起Kubernetes集群中跨Node的Pod无法通信。但这里通过安装docker 1806,发现默认策略又改回了ACCEPT,这个不知道是从哪个版本改回的,因为我们线上版本使用的1706还是需要手动调整这个策略的。

    2.使用kubeadm部署Kubernetes


    2.1 安装kubeadm和kubelet

    下面在各节点安装kubeadm和kubelet:

    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=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
    

    注意:此处与参考的原文不同,原文用了google的资源,因为google联不上,此处改为aliyun,且不开启check(check=0)

    yum makecache fast
    yum install -y kubelet kubeadm kubectl
    
    ... 
    Installed:
      kubeadm.x86_64 0:1.13.0-0                                    kubectl.x86_64 0:1.13.0-0                                                           kubelet.x86_64 0:1.13.0-0
    
    Dependency Installed:
      cri-tools.x86_64 0:1.12.0-0                                  kubernetes-cni.x86_64 0:0.6.0-0                                                       socat.x86_64 0:1.7.3.2-2.el7
    

    从安装结果可以看出还安装了cri-tools, kubernetes-cni, socat三个依赖:

    • 官方从Kubernetes 1.9开始就将cni依赖升级到了0.6.0版本,在当前1.12中仍然是这个版本
    • socat是kubelet的依赖
    • cri-tools是CRI(Container Runtime Interface)容器运行时接口的命令行工具

    运行kubelet –help可以看到原来kubelet的绝大多数命令行flag参数都被DEPRECATED了,如:

    ......
    --address 0.0.0.0   The IP address for the Kubelet to serve on (set to 0.0.0.0 for all IPv4 interfaces and `::` for all IPv6 interfaces) (default 0.0.0.0) (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
    ......
    

    而官方推荐我们使用–config指定配置文件,并在配置文件中指定原来这些flag所配置的内容。具体内容可以查看这里Set Kubelet parameters via a config file。这也是Kubernetes为了支持动态Kubelet配置(Dynamic Kubelet Configuration)才这么做的,参考Reconfigure a Node’s Kubelet in a Live Cluster

    kubelet的配置文件必须是json或yaml格式,具体可查看这里

    Kubernetes 1.8开始要求关闭系统的Swap,如果不关闭,默认配置下kubelet将无法启动。(如果不能关闭Swap,则需要修改kubelet的配置,下附)

    关闭系统的Swap方法如下:

    swapoff -a 

    修改 /etc/fstab 文件,注释掉 SWAP 的自动挂载,使用free -m确认swap已经关闭。

    vim /etc/fstab 

    free -m

    swappiness参数调整,修改/etc/sysctl.d/k8s.conf添加下面一行:

    vm.swappiness=0

    执行sysctl -p /etc/sysctl.d/k8s.conf使修改生效。

    sysctl -p /etc/sysctl.d/k8s.conf
    

      

    如果集群主机上还运行其他服务,关闭swap可能会对其他服务产生影响,则可以修改kubelet的配置去掉这个限制:

    使用kubelet的启动参数–fail-swap-on=false去掉必须关闭Swap的限制。 修改/etc/sysconfig/kubelet,加入  KUBELET_EXTRA_ARGS=--fail-swap-on=false

    KUBELET_EXTRA_ARGS=--fail-swap-on=false
    

      

    2.2 使用kubeadm init初始化集群

    各节点开机启动kubelet服务:

      

      

      

      

      

      

      

      

      

      

      

      

      

  • 相关阅读:
    我是如何学习写一个操作系统(七):进程的同步与信号量
    我是如何学习写一个操作系统(六):进程的调度
    我是如何学习写一个操作系统(五):故事的高潮之进程和线程1
    我是如何学习写一个操作系统(四):操作系统之系统调用
    我是如何学习写一个操作系统(三):操作系统的启动之保护模式
    我是如何学习写一个操作系统(二):操作系统的启动之Bootloader
    我是如何学习写一个操作系统(一):开篇
    Android计量单位px,in,mm,pt,dp,dip,sp和获取屏幕尺寸与密度
    Azure自定义角色实现RBAC
    Linux两块4TB的数据磁盘创建8TB的Raid0
  • 原文地址:https://www.cnblogs.com/xianhan/p/10225639.html
Copyright © 2011-2022 走看看