zoukankan      html  css  js  c++  java
  • 部署一套单Master的K8s集群

    # 配置要求

    搭建K8S集群时,推荐在阿里云或腾讯云采购如下配置:(您也可以使用自己的虚拟机、私有云等您最容易获得的 Linux 环境)

    • 至少2台 2核4G 的服务器
    • 本文档中,CPU 必须为 x86 架构,暂时未适配 arm 架构的 CPU
    • CentOS 7.8CentOS Stream 8
    • 本次部署使用CentOS 7.9

    [root@demo-master ~]# cat /etc/redhat-release
    CentOS Linux release 7.9.2009 (Core)

    安装后的软件版本为

    • Kubernetes v1.21.x
      • calico 3.17.1
      • nginx-ingress 1.9.1
    • Containerd.io 1.4.3

    # 检查 centos / hostname

    [root@demo-master ~]# cat /etc/redhat-release
    CentOS Linux release 7.9.2009 (Core)
    [root@demo-master ~]# hostname
    demo-master
    [root@demo-master ~]# lscpu

     [root@demo-master ~]# hostnamectl status

     [root@demo-master ~]# ip route show
    default via 192.168.178.2 dev ens33 proto static metric 100
    192.168.178.0/24 dev ens33 proto kernel scope link src 192.168.178.90 metric 100
    [root@demo-master ~]# ip address

    kubelet使用的IP地址

    • ip route show 命令中,可以知道机器的默认网卡,通常是 eth0,如 default via 172.21.0.23 dev eth0
    • ip address 命令中,可显示默认网卡的 IP 地址,Kubernetes 将使用此 IP 地址与集群内的其他节点通信,如 172.17.216.80
    • 所有节点上 Kubernetes 所使用的 IP 地址必须可以互通(无需 NAT 映射、无安全组或防火墙隔离)

    -----------------------------------------每个个节点都必须部署的---------------------------------------------------------

    export REGISTRY_MIRROR=https://registry.cn-hangzhou.aliyuncs.com
    curl -sSL https://kuboard.cn/install-script/v1.21.x/install_kubelet.sh | sh -s 1.21.4

    -----------------------节点初始化脚本install_kubelet.sh安装 containerd)-------------------------------------
    #!/bin/bash
    
    # 在 master 节点和 worker 节点都要执行
    
    # 安装 containerd
    # 参考文档如下
    # https://kubernetes.io/docs/setup/production-environment/container-runtimes/#containerd
    
    cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
    overlay
    br_netfilter
    EOF
    
    sudo modprobe overlay
    sudo modprobe br_netfilter
    
    # Setup required sysctl params, these persist across reboots.
    cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
    net.bridge.bridge-nf-call-iptables  = 1
    net.ipv4.ip_forward                 = 1
    net.bridge.bridge-nf-call-ip6tables = 1
    EOF
    
    # Apply sysctl params without reboot
    sysctl --system
    
    # 卸载旧版本
    yum remove -y containerd.io
    
    # 设置 yum repository
    yum install -y yum-utils device-mapper-persistent-data lvm2
    yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    
    # 安装 containerd
    yum install -y containerd.io-1.4.3
    
    mkdir -p /etc/containerd
    containerd config default > /etc/containerd/config.toml
    
    sed -i "s#k8s.gcr.io#registry.aliyuncs.com/k8sxio#g"  /etc/containerd/config.toml
    sed -i '/containerd.runtimes.runc.options/a            SystemdCgroup = true' /etc/containerd/config.toml
    sed -i "s#https://registry-1.docker.io#${REGISTRY_MIRROR}#g"  /etc/containerd/config.toml
    
    
    systemctl daemon-reload
    systemctl enable containerd
    systemctl restart containerd
    
    
    # 安装 nfs-utils
    # 必须先安装 nfs-utils 才能挂载 nfs 网络存储
    yum install -y nfs-utils
    yum install -y wget
    
    # 关闭 防火墙
    systemctl stop firewalld
    systemctl disable firewalld
    
    # 关闭 SeLinux
    setenforce 0
    sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
    
    # 关闭 swap
    swapoff -a
    yes | cp /etc/fstab /etc/fstab_bak
    cat /etc/fstab_bak |grep -v swap > /etc/fstab
    
    # 配置K8S的yum源
    cat <<EOF > /etc/yum.repos.d/kubernetes.repo
    [kubernetes]
    name=Kubernetes
    baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
    enabled=1
    gpgcheck=0
    repo_gpgcheck=0
    gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
           http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    EOF
    
    # 卸载旧版本
    yum remove -y kubelet kubeadm kubectl
    
    # 安装kubelet、kubeadm、kubectl
    # 将 ${1} 替换为 kubernetes 版本号,例如 1.20.1
    yum install -y kubelet-${1} kubeadm-${1} kubectl-${1}
    
    crictl config runtime-endpoint /run/containerd/containerd.sock
    
    # 重启 docker,并启动 kubelet
    systemctl daemon-reload
    systemctl enable kubelet && systemctl start kubelet
    
    containerd --version
    kubelet --version
    ------------------------------------------------------------------

    ------------------------------快速安装初始化:--------------------------------------------------------
    export MASTER_IP=192.168.178.90
    export APISERVER_NAME=apiserver.demo
    export POD_SUBNET=10.100.0.0/16
    echo "${MASTER_IP}    ${APISERVER_NAME}" >> /etc/hosts
    curl -sSL https://kuboard.cn/install-script/v1.21.x/init_master.sh | sh -s 1.21.4

    ----------------------init_master.sh详细内容:----------------------------------------

     

    #!/bin/bash

    # 只在 master 节点执行

    # 脚本出错时终止执行
    set -e

    if [ ${#POD_SUBNET} -eq 0 ] || [ ${#APISERVER_NAME} -eq 0 ]; then
      echo -e "33[31;1m请确保您已经设置了环境变量 POD_SUBNET 和 APISERVER_NAME 33[0m"
      echo 当前POD_SUBNET=$POD_SUBNET
      echo 当前APISERVER_NAME=$APISERVER_NAME
      exit 1
    fi


    # 查看完整配置选项 https://godoc.org/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta2
    rm -f ./kubeadm-config.yaml
    cat <<EOF > ./kubeadm-config.yaml
    ---
    apiVersion: kubeadm.k8s.io/v1beta2
    kind: ClusterConfiguration
    kubernetesVersion: v${1}
    imageRepository: registry.aliyuncs.com/k8sxio
    controlPlaneEndpoint: "${APISERVER_NAME}:6443"
    networking:
      serviceSubnet: "10.96.0.0/16"
      podSubnet: "${POD_SUBNET}"
      dnsDomain: "cluster.local"
    dns:
      type: CoreDNS
      imageRepository: swr.cn-east-2.myhuaweicloud.com${2}
      imageTag: 1.8.0

    ---
    apiVersion: kubelet.config.k8s.io/v1beta1
    kind: KubeletConfiguration
    cgroupDriver: systemd
    EOF

    # kubeadm init
    # 根据您服务器网速的情况,您需要等候 3 - 10 分钟
    echo ""
    echo "抓取镜像,请稍候..."
    kubeadm config images pull --config=kubeadm-config.yaml
    echo ""
    echo "初始化 Master 节点"
    kubeadm init --config=kubeadm-config.yaml --upload-certs

    # 配置 kubectl
    rm -rf /root/.kube/
    mkdir /root/.kube/
    cp -i /etc/kubernetes/admin.conf /root/.kube/config
    ------------------------------------------------------------------------------------------------------------

  • 相关阅读:
    asp.net ajax传递Json给aspx.cs后台 webmethod方法传递json
    新手 Redis 配置笔记(windows),附下载地址
    在 LINQ to Entities 查询中无法构造实体或复杂类型
    WebApi 4.0 默认方式不支持HttpGet 请求
    jQuery .Ajax Error Handling Function
    My97DatePicker 与 某个CSS冲突 ,导致无法显示
    基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系
    使用Autofac部署IIS6.0时未能加载文件或程序集“System.Core, Version=2.0.5.0...“
    Could not load file or assembly 'System.Core, Version=2.0.5.0 和autofac冲突的问题
    线程间操作无效: 从不是创建控件“textBox2”的线程访问它
  • 原文地址:https://www.cnblogs.com/yyuuee/p/15195997.html
Copyright © 2011-2022 走看看