zoukankan      html  css  js  c++  java
  • 使用Kubeadm创建k8s集群之部署规划(三十)

    前言         

    上一篇我们讲述了使用Kubectl管理k8s集群,那么接下来,我们将使用kubeadm来启动k8s集群。

    部署k8s集群存在一定的挑战,尤其是部署高可用的k8s集群更是颇为复杂(后续会讲)。因此本教程会在部署的过程中穿插讲解一些部署相关知识、原理和步骤,比如kubeadm、kubelet以及启动集群时的实际部署动作等等。整个部署过程全部脚本化,以便各位参考和学习。

    因整个集群部署教程篇幅较长,因此会拆分成几篇进行说明。


    目录

    使用Kubeadm创建k8s集群

    • Kubeadm概述 

    • Kubelet概述 

    • 定义集群部署目标和规划 

    • 部署规划


    使用Kubeadm创建k8s集群

    Kubeadm概述

    Kubeadm 是一个命令行工具,它主要提供了“kubeadm init” 以及 “kubeadm join”这两个命令来快速创建和初始化kubernetes 集群。

    Kubeadm通过执行必要的操作来启动和运行一个最小可用的集群。它被故意设计为只关心启动集群,而不是之前的节点准备工作。同样的,诸如安装各种各样的插件,例如 Kubernetes Dashboard、监控解决方案以及特定云提供商的插件,这些都不在它负责的范围。

    主要命令

    其主要命令和说明如下表所示:

    命令

    说明

    kubeadm init

    启动一个Kubernetes主节点

    kubeadm join

    启动一个Kubernetes工作节点并且将其加入到集群

    kubeadm upgrade

    更新一个 Kubernetes 集群到新版本

    kubeadm config

    查看存储在集群中的kubeadm配置,例如“kubeadm config images list”可以列出kubeadm需要的镜像

    kubeadm token

    令牌管理

    kubeadm reset

    重置集群,也就是将还原kubeadm init 或者 kubeadm join 对主机所做的任何更改

    kubeadm version

    打印 kubeadm 版本

     

    Kubelet概述

    kubelet 是在每个节点上运行的主要“节点代理”。简单地说,kubelet 的主要功能就是定时获取节点上pod/container 的期望状态(运行什么容器、运行的副本数量、网络或者存储如何配置等等),并调用对应的容器平台接口达到这个状态,并确保它们能够健康的运行。因此,kubelet的主要功能为:

    • pod管理

    • 容器健康检查

    • 容器监控 

    注意,不是 Kubernetes创建的容器将不在 kubelet 的管理范围。

    了解了这些,接下来,我们来使用Kubeadm来创建集群。

     

    定义集群部署目标和规划

    有目标,我们才能有的放矢。在本节内容中,我们将基于三台虚拟机来搭建一个k8s集群,其中一台作为主节点,另外两台作为工作节点。

    具体部署架构如下所示:

    1.安装规划

    服务器规划:

    主机名称

    操作系统

    IP

    系统配置

    备注

    k8s-master

    CentOS-7-x86_64

    172.16.2.201

    2核2G

    作为主节点

    k8s-node1

    CentOS-7-x86_64

    172.16.2.202

    2核2G

    作为工作节点

    k8s-node2

    CentOS-7-x86_64

    172.16.2.203

    2核2G

    作为工作节点

    值得注意的是:

    • 服务器最小内存不得小于2G,CPU核心数最少为2;

    • 群集中所有的计算机之间拥有完全的网络连接(公共或专用网络);

    • 所有机器都有sudo权限;

    相关环境的搭建和初始化笔者这里先行略过。

    以下内容均使用root账户安装和配置。

    Pod 分配 IP 段:10.244.0.0/16

    kubernetes-version:v1.15.0

    apiserver-advertise-address:172.16.2.201

     

    部署规划

    接下来,我们就开始按规划进行部署。主体步骤如下所示:

    1.主机和IP设置

    各节点主机名称和IP设置如表所示:

    主机名称

    IP

    k8s-master

    172.16.2.201

    k8s-node1

    172.16.2.202

    k8s-node2

    172.16.2.203

    接下来我们以master(k8s-master)为例,相关设置步骤如下所示(请注意替换相关参数):

    • 设置主机名称以及修改主机记录

    bash:
    #设置Host名称
    hostnamectl set-hostname k8s-master #查看host名称
    hostname #修改Host文件,给127.
    0.0.1添加hostname
    echo "127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 k8s-master
    ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
    "> /etc/hosts #查看修改结果
    cat
    /etc/hosts

    • 配置网络服务以及设置固定IP

    bash:
    #配置网卡
    echo "

    DEVICE=eth0
    TYPE=Ethernet
    IPADDR=172.16.2.201
    PREFIX=24
    NETMASK=255.255.255.0
    NETWORK=172.16.2.0
    GATEWAY=172.16.2.254
    BROADCAST=172.16.2.255
    DEFROUTE=yes
    ONBOOT=yes
    USERCTL=yes
    BOOTPROTO=static
    NAME=eth0
    IPV4_FAILURE_FATAL=yes
    UUID=5ed1bf4a-4be2-4040-ad55-fea853b849d1
    "> /etc/sysconfig/network-scripts/ifcfg-eth0 #编辑/etc/sysconfig/network
    echo "NETWORKING=yes
    HOSTNAME=k8s-master
    "> /etc/sysconfig/network #编辑/etc/resolv.conf,设置DNS
    echo "nameserver 172.16.2.254
    nameserver 114.114.114.114
    nameserver 8.8.8.8
    "> /etc/resolv.conf #重启网络服务systemctl restart network.service #重启网络服务
    systemctl status network.service #查看网络服务状态

    • 系统设置

    bash:
    #关闭Selinux
    sed -i 's/SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
    
    #永久关闭
    Swapswapoff -a
    sed -ri 's/.*swap.*/#&/' /etc/fstab
    echo "vm.swappiness = 0">> /etc/sysctl.conf  
    
    #修改内核参数cat <<EOF > /etc/sysctl.d/k8s.confnet.ipv4.ip_forward = 1
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    vm.swappiness=0
    EOF

    2.Docker安装

    这里推荐使用以下脚本来安装官方已经充分测试过的指定版本的Docker-ce以及设置加速器:

    # 安装必须的包
    yum install yum-utils device-mapper-persistent-data lvm2
    # 添加Docker仓库
    yum-config-manager   
    --add-repo  
     https://download.docker.com/linux/centos/docker-ce.repo
    # 安装指定版本的Docker CEyum update &&
     yum install docker-ce-18.06.2.ce
    # 创建 /etc/docker 目录
    mkdir /etc/docker
    # 设置守护程序
    cat > /etc/docker/daemon.json <<EOF
    { 
    "exec-opts": ["native.cgroupdriver=systemd"], 
    "log-driver": "json-file", 
    "log-opts": {    
    "max-size": "100m" 
     },  
    "storage-driver": "overlay2",  
    "storage-opts": [    
    "overlay2.override_kernel_check=true"  
    ] ,  
    "registry-mirrors": ["https://mirror.ccs.tencentyun.com"]
    }
    EOF
    mkdir -p /etc/systemd/system/docker.service.d
    # 重启Docker服务
    systemctl daemon-reload
    systemctl enable docker
    systemctl restart docker

    3.主机端口设置

    • 主节点端口设置:

    协议

    方向

    端口

    说明

    TCP

    入站

    6443*

    Kubernetes API server

    TCP

    入站

    2379-2380

    etcd server client API

    TCP

    入站

    10250

    Kubelet API

    TCP

    入站

    10251

    kube-scheduler

    TCP

    入站

    10252

    kube-controller-manager

    • 工作节点端口设置:

    协议

    方向

    端口

    说明

    TCP

    入站

    10250

    Kubelet API

    TCP

    入站

    30000-32767

    NodePort Services

    CentOS默认没有安装防火墙,需要使用以下命令安装和启用防火墙:

    #安装iptables服务
    yum install iptables-services
    systemctl enable iptables.servicesy
    stemctl start iptables.service

    然后使用编辑器按Demo编辑文件/etc/sysconfig/iptables设置准入端口即可。

    在开发实验阶段,为了方便,大家也可以直接禁用防火墙:

    systemctl stop firewalld.service
    systemctl disable firewalld.service

    往期内容链接

  • 相关阅读:
    信号
    test
    keil4打开keil5工程卡死问题
    day01
    SSH问题
    QT_day02
    QT_day01
    C++_day9am
    文件描述符与重定向
    C++_day8pm_多态
  • 原文地址:https://www.cnblogs.com/codelove/p/11236117.html
Copyright © 2011-2022 走看看