创建多节点 k8s 集群

主机 IP 系统
master 192.168.2.15 ubuntu20.04 x64 2C 4G
Worker1 192.168.2.16 ubuntu20.04 x64 2C 4G
Worker1 192.168.2.18 ubuntu20.04 x64 2C 4G

使用 iterm2 连接四台服务器 command + shift + i 同时操作

  1. 初始化配置

    关闭防火墙

    bash 复制代码
    systemctl stop firewalld
    systemctl disable firewalld

    关闭selinux

    bash 复制代码
    sed -i 's/enforcing/disabled/' /etc/selinux/config  # 永久
    setenforce 0  # 临时

    关闭swap

    bash 复制代码
    swapoff -a  # 临时
    sed -ri 's/.*swap.*/#&/' /etc/fstab    # 永久

    根据规划分别设置主机名

    bash 复制代码
    hostnamectl set-hostname <hostname>
    master1、worker1、worker2

    在master添加hosts

    bash 复制代码
    cat >> /etc/hosts << EOF
    192.168.2.15 k8s-master1
    192.168.2.18  k8s-worker1
    192.168.2.16 k8s-worker2
    > EOF

    将桥接的 IPv4 流量传递到 iptables 的链

    bash 复制代码
    cat > /etc/sysctl.d/k8s.conf << EOF
    
    net.bridge.bridge-nf-call-ip6tables = 1
    
    net.bridge.bridge-nf-call-iptables = 1
    
    EOF
    sysctl --system  # 生效

    时间同步

    bash 复制代码
    yum install ntpdate -y
    ntpdate time.windows.com
  2. 所有节点安装 Docker

    bash 复制代码
    wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
    
    yum -y install docker-ce
    # 设置开机自启并重启
    systemctl enable docker && systemctl start docker
  3. 配置镜像下载加速器

    bash 复制代码
    vim /etc/docker/daemon.json
    # 添加
    {
      "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"],
      "exec-opts": ["native.cgroupdriver=systemd"]
    }
    
    systemctl restart docker
    
    docker info   #查看docker信息,进行确认
    
    # 添加软件源:
    cat > /etc/yum.repos.d/kubernetes.repo << EOF
    [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
  4. 安装 kubeadm、kubelet、kubectl:

    bash 复制代码
    yum install -y kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0
    systemctl enable kubelet
  5. 部署 k8s-master【master执行】

    bash 复制代码
    kubeadm 部署(需要等上一会),需要在两个 master 上分别执行,apiserver 分别指定自身 IP
    
    kubeadm init \
    --apiserver-advertise-address=192.168.2.15 \
    --image-repository registry.aliyuncs.com/google_containers \
    --kubernetes-version v1.23.0 \
    --service-cidr=10.96.0.0/12 \
    --pod-network-cidr=10.244.0.0/16 \
    --ignore-preflight-errors=all
    
    # 解释
    --apiserver-advertise-address 集群通告地址
    --image-repository 由于默认拉取镜像地址k8s.gcr.io国内无法访问
    --kubernetes-version K8s版本,与上面安装的一致
    --service-cidr 集群内部虚拟网络,Pod统一访问入口
    --pod-network-cidr Pod网络,与下面部署的CNI网络组件yaml中保持一致
    # 初始化之后,会输出一个join命令,先复制出来,node节点加入master会使用
     kubeadm join 192.168.2.15:6443 --token uyx18p.o5yd0n88fd3rny6i \
    	--discovery-token-ca-cert-hash sha256:5db69227ff23b9073e74d7aa244fa04f9b42aa6c512220612e9bfca1e93fb6d9
  6. 拷贝 k8s 认证文件

    bash 复制代码
    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
    # 查看工作节点:
    kubectl get nodes

    注:由于网络插件还没有部署,还没有准备就绪 NotReady,继续操作

  7. 配置 k8s 的 node 节点【node节点操作】

    在 node 节点执行加入命令,执行后在 master 可以看到新增节点

    默认 token 有效期为 24 小时,当过期之后,该 token 就不可用了。这时就需要重新创建 token,可以直接使用命令快捷生成:

    bash 复制代码
     kubeadm token create --print-join-command
  8. 部署 CNI 网络插件

    在上述操作完成后,各个工作节点已经加入了集群,但是它们的状态都是 NoReady,这是由于无它们无法跨主机通信的原因。而 CNI 网络插件的主要功能就是实现 pod 资源能够跨宿主机进行通信。在master节点中执行以下命令进行配置:

    bash 复制代码
    wget https://docs.projectcalico.org/manifests/calico.yaml

    下载完后还需要修改里面定义 Pod 网络(CALICO_IPV4POOL_CIDR),取消注释,value 与前面 kubeadm init 的 --pod-network-cidr 指定的一样

    bash 复制代码
    # 修改完后文件后,进行部署:
    kubectl apply -f calico.yaml
    
    kubectl get pods -n kube-system                        #执行结束要等上一会才全部running

    注:以后所有 yaml 文件都只在 Master 节点执行。

    安装目录:/etc/kubernetes/

    组件配置文件目录:/etc/kubernetes/manifests/

  9. 部署 Dashboard

    Dashboard 是官方提供的一个 UI,可用于基本管理 K8s 资源。

    YAML下载地址:

    bash 复制代码
     wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml

    默认 Dashboard 只能集群内部访问,修改 Service 为 NodePort 类型,暴露到外部:

    使用命令判断启动状态

    bash 复制代码
    kubectl get pods --all-namespaces
    kubectl get pods -n kubernetes-dashboard

    浏览器访问:https://NodeIP:30001

    报错解决:Dashboard 证书不信任,浏览器无法访问

    bash 复制代码
    1、删除默认的secret,用自签证书创建新的secret
    kubectl delete secret kubernetes-dashboard-certs -n kubernetes-dashboard
    kubectl create secret generic kubernetes-dashboard-certs --from-file=/etc/kubernetes/pki/apiserver.key --from-file=/etc/kubernetes/pki/apiserver.crt -n kubernetes-dashboard
    
    2、修改dashboard.yaml文件,在args下面增加如下两行
       args:
         - --auto-generate-certificates
    	 - --tls-key-file=apiserver.key
    	 - --tls-cert-file=apiserver.crt
    	 
    3、重新应用yaml即可
    kubectl apply -f kubernetes-dashboard.yaml
    
    说明:新版本镜像2.0.3及以上已解决证书信任问题,可任意浏览器访问
  10. 创建 service account 并绑定默认 cluster-admin 管理员集群角色:

    创建用户

    bash 复制代码
    kubectl create serviceaccount dashboard-admin -n kube-system

    用户授权

    bash 复制代码
    kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin

    获取用户 Token

    bash 复制代码
    kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

    使用创建的 token 登录 dashboard

相关推荐
1024find1 天前
Spark on k8s部署
大数据·运维·容器·spark·kubernetes
kura_tsuki1 天前
[Docker集群] Docker 容器入门
运维·docker·容器
能不能别报错2 天前
K8s学习笔记(十六) 探针(Probe)
笔记·学习·kubernetes
能不能别报错2 天前
K8s学习笔记(十四) DaemonSet
笔记·学习·kubernetes
火星MARK2 天前
k8s面试题
容器·面试·kubernetes
Serverless社区2 天前
阿里云函数计算 AgentRun 全新发布,构筑智能体时代的基础设施
阿里云·云原生·serverless·函数计算
赵渝强老师2 天前
【赵渝强老师】Docker容器的资源管理机制
linux·docker·容器·kubernetes
能不能别报错2 天前
K8s学习笔记(十五) pause容器与init容器
笔记·学习·kubernetes
稚辉君.MCA_P8_Java2 天前
kafka解决了什么问题?mmap 和sendfile
java·spring boot·分布式·kafka·kubernetes
乄bluefox2 天前
保姆级docker部署nacos集群
java·docker·容器