创建多节点 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

相关推荐
laimaxgg2 小时前
Docker华为云创建私人镜像仓库
运维·服务器·docker·容器·华为云
李的阿洁3 小时前
k8s中pod报错 FailedCreatePodSandBox
云原生·容器·kubernetes
咖啡调调。4 小时前
使用DaemonSet部署集群守护进程集
运维·云原生·容器·kubernetes
CAE虚拟与现实8 小时前
Dockerfile 文件常见命令及其作用
docker·容器·k8s·镜像·dockerhub
帽儿山的枪手10 小时前
程序员必掌握的docker命令
docker·容器·kubernetes
重生之我是cxk10 小时前
docker多架构镜像构建
docker·容器·架构
Ares-Wang11 小时前
kubernetes》》k8s》》ConfigMap 、Secret
云原生·容器·kubernetes
半吊子的程序狗11 小时前
docker测试镜像源
运维·docker·容器
Pasregret11 小时前
05-微服务可观测性体系建设:从日志、监控到链路追踪实战指南
java·微服务·云原生·架构
XDIGAS12 小时前
Dockerfile项目实战-单阶段构建Vue2项目
docker·容器·centos·node.js·vue