• kubernetes集群(centos7)


     01.系统初始化

    01-01.集群机

    • master:192.168.10.108
    • node01:192.168.10.109
    • node02:192.168.10.110
    • node03:192.168.10.111

    01-02.设置主机名

    1. 设置永久主机名,然后重新登录
      • $ sudo hostnamectl set-hostname master
      • $ sudo hostnamectl set-hostname node01
      • $ sudo hostnamectl set-hostname node02
      • $ sudo hostnamectl set-hostname node03
    2. 修改 /etc/hostname 文件,添加主机名和 IP 的对应关系:
      • $ vim /etc/hosts

               192.168.10.108 master.magedu.com master

            192.168.10.108 node01.magedu.com node01

            192.168.10.108 node02.magedu.com node02

            192.168.10.108 node03.magedu.com node03

    01-03.设置主机时钟同步

    1. 查看各主机时间:$ date
    2. 时间不同步安装同步工具chrony:yum install chrony -y
    3. 启动chrony
      • $ systemctl start chronyd.service
      • $ systemctl status chronyd.service
      • $ systemctl restart chronyd

    01-04.关闭iptables或firewalld服务

      在CentOS7上,iptables或firewalld服务通常只会安装并启动一种,在不确认具体启动状态的前提下,这里通过同时关闭禁用二者即可简单达到设定目标。

      • $ systemctl stop firewalld.service
      • $ systemctl stop iptables.service
      • $ systemctl disable firewalld.service
      • $ systemctl disable iptables.service

      验证getenforce是否关闭Disabled

      • $ getenforce

    01-05.禁用Swap设备

      部署集群时,kubeadm默认会预先检查当前主机是否禁用了Swap设备,并在未禁用时强制终止部署过程。因此,在主机内存资源充裕的条件下,需要禁用所有的Swap设备,否则,就需要在后文的kubeadm init及kubeadm join命令执行时额外使用相关的选项忽略检查错误。

      关闭Swap设备,需要分两步完成。首先是关闭当前已启用的所有Swap设备:

      • $ swapoff -a

      而后编辑/etc/fstab配置文件,注释用于挂载Swap设备的所有行。

    01-06.启用ipvs内核模块

      创建内核模块载入相关的脚本文件/etc/sysconfig/modules/ipvs.modules,设定自动载入的内核模块。文件内容如下:

        cd /usr/lib/modules下ls查看有哪些版本,uname -r查看当前使用的版本

    #!/bin/bash
    ipvs_mods_dir="/usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs" for mod in $(ls $ipvs_mods_dir | grep -o "^[^.]*"); do /sbin/modinfo -F filename $mod &> /dev/null if [ $? -eq 0 ]; then /sbin/modprobe $mod fi done

      修改文件权限,并手动为当前系统加载内核模块:

      • $ chmod +x /etc/sysconfig/modules/ipvs.modules
      • $ bash /etc/sysconfig/modules/ipvs.modules

     02.安装程序包(在各主机上完成如下设定)

    02-01.生成yum仓库配置

    1. 首先获取docker-ce的配置仓库配置文件/etc/yum.repos.d/docker.repo:

        $ wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -0 /etc/yum.repos.d/docker.repo

        2. 而后手动生成kubernetes的yum仓库配置文件/etc/yum.repos.d/kubernetes.repo,内容如下:

          [kubernetes]

          name=Kubernetes

          baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/

          gpgcheck=1

          gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

              https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg

          enabled=1

       3.把docker-ce.repo放到其他几台主机:

      • $ scp docker-ce.repo node01:/etc/yum.repos.d/
      • $ scp docker-ce.repo node02:/etc/yum.repos.d/
      • $ scp docker-ce.repo node03:/etc/yum.repos.d/

    02-02.按装相关的程序包

      Kubernetes会对经过充分验证的Docker程序版本进行认证,目前认证完成的最高版本是17.03,但docker-ce的最新版本已经高出了几个版本号。管理员可忽略此认证而直接使用最新版本的docker-ce程序,不过,建议根据后面的说明,将安装命令替换为安装17.03版。

       1.每台主机都要安装docker-ce、kubelet、kubeadm、kubectl

      • $ yum -y install docker-ce
      • $ yum install kubelet kubeadm kubectl

        2.如果安装目前经过Kubernetes认证的docker-17版本,可以将上面第一条安装命令替换为如下命令:

      • $ yum install -y --setopt=obsoletes=0 docker-ce-17.03.2.ce docker-ce-selinux-17.03.2.ce

    03.启动docker服务(在各节点执行)

      若要通过默认的k8s.gcr.io镜像仓库获取Kubernetes系统组件的相关镜像,需要配置docker Unit File (/usr/lib/systemd/system/docker.service文件)中的Environment变量,为其定义合用的HTTPS_PROXY,格式如下:

         Environment="HTTPS_PROXY=PROTOCOL://HOST:PORT"

         Environment="NO_PROXY=172.20.0.0/16,127.0.0.0/8"

      另外,docker自1.13版起会自动设置iptables的FORWARD默认策略为DROP,这可能会影响Kubernetes集群依赖的报文转发功能,因此,需要在docker服务启动后,重新将FORWARD链的默认策略设置为ACCEPT,方式是修改/usr/lib/systemd/system/docker.service文件,在"ExecStart=/usr/bin/dockerd"一行之后新增一行如下内容:

         ExecStartPost=/usr/sbin/iptables -P FORWARD ACCEPT

        ip6tables和iptables都是为1才行

          $ sysctl -a | grep bridge

        重载完后可启动docker服务

        $ systemctl daemon-reload

        $ systemctl start docker.service

        而后设定docker和kubelet随系统引导自动启动:

        $ systemctl enable docker kubelet

    04.初始化主节点(在master01完成如下操作)

      1.初始化master节点

        若未禁用Swap设备,则需要编辑kubelet的配置文件/etc/sysconfig/kubelet,设置其忽略Swap启用的状态错误,内容如下:

        KUBELET_EXTRA_ARGS="--fail-swap-on=false"

        (可选步骤)而后,在运行初始化命令之前先运行如下命令单独获取相关的镜像文件,而后再运行后面的kubeadm init命令,以便于观察到镜像文件的下载过程。

        $ kubeadm config images pull

        而后即可进行master节点初始化。kubeadm init命令支持两种初始化方式,一是通过命令行选项传递关键的部署设定,另一个是基于yaml格式的专用配置文件,后一种允许用户自定义各个部署参数。下面分别给出了两种实现方式的配置步骤,建议读者采用第二种方式进行。

        初始化方式一:

          运行如下命令完成master01节点的初始化:

          $ kubeadm init --kubernetes-version=v1.12.1 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap

      命令中的各选项简单说明如下:

        (1)--kubernetes-version选项的版本号用于指定要部署的Kubertes程序版本,它需要与当前的kubeadm支持的版本保持一致;

        (2)--pod-network-cidr选项用于指定分Pod分配使用的网络地址,它通常应该与要部署用的网络插件(例如flannel、calico等)的默认设定保持一致,10.244.0.0/16是flannel默认使用的网络;

        (3)--service-cidr用于指定为Service分配使用的网络地址,它由kubernetes管理,默认即为10.96.0.0/12;

        (4)最后一个选项“--ignore-preflight-errors=Swap”仅应该在未禁用Swap设备状态下使用。

         初始化方式二:

          kubeadm也可以通过配置文件加载配置,以定制更丰富的部署选项。以下是个符合前述命令设定方式的使用实例,不过,它明确定义了kubeProxy的模式为ipvs,并支持通过修改imageRepository的值修改获取系统镜像时使用的镜像仓库。

    apiVersion:kubeadm.k8s.io/vlalpha2
    kind:MasterConfiguration
    kubernetesVersion:v1.12.1
    api:
      advertiseAddress:172.20.0.71
      bindPort:6443
      controlPlaneEndpoint:""
    imageRepository:k8s.gcr.io
    kubeProxy:
      config:
        mode:"ipvs"
        ipvs:
          ExcludeCIDRs:null
          minSyncPeriod:0s
          scheduler:""
          syncPeriod:30s
    kubeletConfiguration:
      baseConfig:
        cgroupDriver:cgroupfs
        clusterDNS:
        -10.96.0.10
        clusterDomain:cluster.local
        failSwapOn:false
        resolvConf:/etc/resolv.conf
        staticPodPath:/etc/kubernetes/manifests

  • 相关阅读:
    npm查找全局安装包命令
    sublime3添加对react代码检查
    Android开发——搭建最新版本的Android开发环境
    git无法定位程序输入点libiconv
    Java学习----finally块
    Java学习----有风险的代码(异常)
    Java学习----集合函数
    Java学习----Math函数
    Java学习----日期函数
    Java学习----字符串函数
  • 原文地址:https://www.cnblogs.com/nbeee/p/11270032.html
Copyright © 2020-2023  润新知