zoukankan      html  css  js  c++  java
  • 使用kubeadm部署k8s

    k8s组件

    master,node

    master中包括apiserver,scheduler,controller。etcd

    apiserver:负责接收用户请求,并且保存至etcd中。

    scheduler:负责将apisever中创建的资源根据node的负载情况调度至其他node

    controller:负责监控apiserver中用户期望创建资源的状态。如果当前状态与期望状态不同,controller就会试图将资源重启或者删除重建。和拉取容器镜像

    etcd:用于保存k8s cluster中的所有配置信息

    node节点:kubelet,kube-proxy,docker,pod

    docker/容器引擎:运行pod时容器引擎

    kubelet:相当于agent,会watch着apiserver中的资源变动,一旦资源跟自己节点有关,则执行调动docker引擎。拉取镜像。创建容器

    pod:k8s中的核心基本单元。一个pod中可以存在多个容器。一个pod共享同一组网络空间。IPC。等

    kube-proxy:

    ADDONS插件:

    DNS:用于服务注册服务发现

    CNI:容器网络插件。包括(flannel,calico)

    k8s中常用的资源类型:Pod,Service,Namespace,Volume。控制器对象。ReplicaSet,deployment,DaemonSet,StatefulSet。等等

    使用kubeadm容器化部署k8s

    设定时钟同步

    若节点可直接访问互联网,直接启动chronyd系统服务,并设定其随系统引导而启动。

            ~]# systemctl start chronyd.service
            ~]# systemctl enable chronyd.service
    

    关闭iptables或firewalld服务

    关闭并禁用SELinux

    若当前启用了SELinux,则需要编辑/etc/sysconfig/selinux文件,禁用SELinux,并临时设置其当前状态为permissive:

        ~]# sed -i 's@^(SELINUX=).*@1disabled@' /etc/sysconfig/selinux
        ~]# setenforce 0
    

    禁用Swap设备

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

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

        ~]# swapoff -a
    

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

    启用ipvs内核模块

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

    #!/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
    

    **二、安装程序包(在各主机上完成如下设定) **

    1、生成yum仓库配置

    首先获取docker-ce的配置仓库配置文件:

            ~]# wwget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker.repo
    

    而后手动生成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
    enabled=1
    

    2、安装相关的程序包

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

        ~]# yum install docker-ce -y
        ~]# yum install kubelet kubeadm kubectl -y
    

    三、启动docker服务(在各节点执行)

    另外,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
    

    image

    重载完成后即可启动docker服务:

        ~]#systemctl daemon-reload       
    
        ~]# systemctl start docker.service
    

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

    ~]# systemctl enable docker kubelet

    四、初始化主节点(在master上完成如下操作)

    1、初始化master节点

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

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

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

        ~]# kubeadm config images pull
    

    初始化方式一:

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

        ~]# kubeadm init --kubernetes-version=v1.16.3 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap --image-repository gcr.azk8s.cn/google_containers
    

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

    (1) --kubernetes-version选项的版本号用于指定要部署的Kubenretes程序版本,它需要与当前的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设备的状态下使用。
    (5) --image-repository gcr.azk8s.wcn/google_containers 更改默认的镜像仓库指定为国内镜像

    初始化方式二:

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

    apiVersion: kubeadm.k8s.io/v1alpha2
    kind: MasterConfiguration
    kubernetesVersion: v1.13.3
    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
    networking:
      dnsDomain: cluster.local
      podSubnet: 10.244.0.0/16
      serviceSubnet: 10.96.0.0/12
    

    将上面的内容保存于配置文件中,例如kubeadm-config.yaml,而后执行相应的命令:

      ~]# kubeadm init --config kubeadm-config.yaml --ignore-preflight-errors=Swap
    

    注意:对于Kubernetes系统的新用户来说,无论使用上述哪种方法,命令运行结束后,请记录最后的kubeadm join命令输出的最后提示的操作步骤。下面的内容是需要用户记录的一个命令输出示例,它提示了后续需要的操作步骤:

    image.png

    2、初始化kubectl

    kubectl是kube-apiserver的命令行客户端程序,实现了除系统部署之外的几乎全部的管理操作,是kubernetes管理员使用最多的命令之一。kubectl需经由API server认证及授权后方能执行相应的管理操作,kubeadm部署的集群为其生成了一个具有管理员权限的认证配置文件/etc/kubernetes/admin.conf,它可由kubectl通过默认的“$HOME/.kube/config”的路径进行加载。当然,用户也可在kubectl命令上使用--kubeconfig选项指定一个别的位置。

    下面复制认证为Kubernetes系统管理员的配置文件至目标用户(例如当前用户root)的家目录下:

        ~]# mkdir ~/.kube 
        ~]# cp /etc/kubernetes/admin.conf ~/.kube/config
    

    而后,即可通过kubectl进行客户端命令测试,并借此了解集群组件的当前状态:
    ~]# kubectl get componentstatus

    一个正常的输出应该类似如下输出结果所示:

    NAME                 STATUS    MESSAGE              ERROR
      controller-manager   Healthy   ok                   
      scheduler            Healthy   ok                   
      etcd-0               Healthy   {"health": "true"}
    

    node节点拉取镜像

     docker image pull gcr.azk8s.cn/google_containers/kube-proxy:v1.16.3 && docker image pull gcr.azk8s.cn/google_containers/pause:3.1 && docker image pull quay.io/coreos/flannel:v0.11.0-amd64
    

    3、添加flannel网络附件

    Kubernetes系统上Pod网络的实现依赖于第三方插件进行,这类插件有近数十种之多,较为著名的有flannel、calico、canal和kube-router等,简单易用的实现是为CoreOS提供的flannel项目。下面的命令用于在线部署flannel至Kubernetes系统之上:

        ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    

    image.png

    而后使用如下命令确认其输出结果中Pod的状态为“Running”,类似如下所示:

        ~]# kubectl get pods -n kube-system -l app=flannel
        NAME                          READY   STATUS    RESTARTS   AGE
        kube-flannel-ds-amd64-wscnz   1/1     Running   0          14m
    

    五、添加节点到集群中(在node01和node02上分别完成如下操作)

    1、若未禁用Swap设备,编辑kubelet的配置文件/etc/sysconfig/kubelet,设置其忽略Swap启用的状态错误,内容如下:
    KUBELET_EXTRA_ARGS="--fail-swap-on=false"

    kubeadm join 192.168.1.195:6443 --token b3agph.vszgxzb76lneyob5
    --discovery-token-ca-cert-hash sha256:19fcd3a8494247f8f12ce17fb65620853301cb07662c2f56c627075d4dbdc3db
    image.png

    部署完成

  • 相关阅读:
    图像检索(image retrieval)- 11
    图像检索(image retrieval)- 10相关
    Mock.js简易教程,脱离后端独立开发,实现增删改查功能
    Azure Monitor (3) 对虚拟机磁盘设置自定义监控
    Azure Monitor (1) 概述
    Azure SQL Managed Instance (2) 备份SQL MI
    Azure Virtual Network (17) Private Link演示
    Azure Virtual Network (16) Private Link
    Azure Virtual Network (15) Service Endpoint演示
    Azure Virtual Network (14) Service Endpoint服务终结点
  • 原文地址:https://www.cnblogs.com/woaiyitiaochai/p/12023131.html
Copyright © 2011-2022 走看看