• 部署Kubernetes 集群


    kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具。

    这个工具能通过两条指令完成一个kubernetes集群的部署:

    # 创建一个 Master 节点

    $ kubeadm init

    # 将一个 Node 节点加入到当前集群中

    $ kubeadm join

    1. 安装要求

    在开始之前,部署Kubernetes集群机器需要满足以下几个条件:

    一台或多台机器,操作系统 CentOS7.x-86_x64;

    硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多;

    集群中所有机器之间网络互通;

    可以访问外网,需要拉取镜像;

    禁止swap分区。

    2. 准备环境

    角色                  IP

    k8s-master       192.168.31.61

    k8s-node1         192.168.31.62

    k8s-node2         192.168.31.63

    关闭防火墙:

    $ systemctl stop firewalld

    $ systemctl disable firewalld

    关闭selinux:

    $ sed -i 's/enforcing/disabled/'/etc/selinux/config  # 永久

    $ setenforce 0# 临时

    关闭swap:

    $ swapoff -a  # 临时

    $ vim /etc/fstab  # 永久

    根据规划设置主机名:

    $ hostnamectl set-hostname

    在master添加hosts:

    $ cat >>/etc/hosts << EOF

    192.168.31.61 k8s-master

    192.168.31.62 k8s-node1

    192.168.31.63 k8s-node2

    EOF

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

    $ cat >/etc/sysctl.d/k8s.conf << EOF

    net.bridge.bridge-nf-call-ip6tables =1

    net.bridge.bridge-nf-call-iptables =1

    EOF

    $ sysctl --system  # 生效

    时间同步:

    $ yum install ntpdate -y

    $ ntpdate time.windows.com

    3. 安装Docker/kubeadm/kubelet【所有节点】

    Kubernetes默认CRI(容器运行时)为Docker,因此先安装Docker。

    3.1 安装Docker

    $ 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

    配置镜像下载加速器:

    $ cat >/etc/docker/daemon.json << EOF

    {

    "registry-mirrors":["https://b9pmyelo.mirror.aliyuncs.com"]

    }

    EOF

    $ systemctl restart docker

    3.2 添加阿里云YUM软件源

    $ 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

    3.3 安装kubeadm,kubelet和kubectl

    $ yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0

    $ systemctl enable kubelet

    kubelet:systemd守护进程管理

    kubeadm:部署工具

    kubectl:k8s命令行管理工具

    4. 部署Kubernetes Master

    在192.168.31.61(Master)执行。

    $ kubeadm init \

    --apiserver-advertise-address=192.168.31.61 \

    --image-repository registry.aliyuncs.com/google_containers \

    --kubernetes-version v1.18.0 \

    --service-cidr=10.96.0.0/12 \

    --pod-network-cidr=10.244.0.0/16

    —apiserver-advertise-address 集群通告地址

    —image-repository 由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址。

    —kubernetes-version K8s版本,与上面安装的一致

    —service-cidr 集群内部虚拟网络,Pod统一访问入口

    —pod-network-cidr Pod网络,与下面部署的CNI网络组件yaml中保持一致

    拷贝kubectl使用的连接k8s认证文件到默认路径:

    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

    NAME         STATUS   ROLES    AGE   VERSION

    k8s-master  NotReady    master   2m   v1.18.0

    5. 加入Kubernetes Node

    在192.168.31.62/63(Node)执行。

    向集群添加新节点,执行在kubeadm init输出的kubeadm join命令:

    $ kubeadm join 192.168.31.61:6443--token esce21.q6hetwm8si29qxwn \

    --discovery-token-ca-cert-hash sha256:00603a05805807501d7181c3d60b478788408cfe6cedefedb1f97569708be9c5

    默认token有效期为24小时,当过期之后,该token就不可用了。这时就需要重新创建token,操作如下:

    $ kubeadm token create --print-join-command

    6. 部署容器网络(CNI)

    这里使用Flannel作为Kubernetes容器网络方案,解决容器跨主机网络通信。

    Flannel是CoreOS维护的一个网络组件,Flannel为每个Pod提供全局唯一的IP,Flannel使用ETCD来存储Pod子网与Node IP之间的关系。flanneld守护进程在每台主机上运行,并负责维护ETCD信息和路由数据包。

    $ wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

    # 修改国内镜像地址

    $ sed -i -r "s#quay.io/coreos/flannel:.*-amd64#lizhenliang/flannel:v0.11.0-amd64#g" kube-flannel.yml

    kubectl apply -f kube-flannel.yml

    $ kubectl get pods -n kube-system

    7. 部署官方Dashboard(UI)

    $ wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.3/aio/deploy/recommended.yaml

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

    $ vi recommended.yaml

    ...

    kind:Service

    apiVersion: v1

    metadata:

      labels:

        k8s-app: kubernetes-dashboard

      name: kubernetes-dashboard

    namespace: kubernetes-dashboard

    spec:

      ports:

    - port:443

          targetPort:8443

          nodePort:30001

      selector:

        k8s-app: kubernetes-dashboard

      type:NodePort

    $ kubectl apply -f recommended.yaml

    $ kubectl get pods -n kubernetes-dashboard

    NAME                                         READY   STATUS    RESTARTS   AGE

    dashboard-metrics-scraper-6b4884c9d5-gl8nr   1/1  Running  0  13m

    kubernetes-dashboard-7f99b75bf4-89cds  1/1  Running  0  13m

    访问地址:https://NodeIP:30001

    创建service account并绑定默认cluster-admin管理员集群角色:

    # 创建用户

    $ kubectl create serviceaccount dashboard-admin -n kube-system

    # 用户授权

    $ kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin

    # 获取用户Token

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

  • 相关阅读:
    34 IDEA 架包,字体...
    JAVA学习------ConcurrentHashMap实现原理
    常用巡检命令
    数据结构——3道栈和队列OJ题
    R语言绘制时间序列的自相关函数图:使用acf函数可视化时间序列数据的自相关系数图
    数据结构:八种常见数据结构
    Android Jetpack Compose——一个简单的聊天界面
    糖友可以喝酸奶吗?
    【图论】Dijkstra 算法求最短路 - 构建邻接矩阵(带权无向图)
    总结/笔记-逻辑函数封装
  • 原文地址:https://blog.csdn.net/weixin_38887743/article/details/134494628