• kubernetes集群搭建


    在这里插入图片描述

    首先需要搭建三台服务器

    安装Docker

    • 移除以前的docker相关包
    sudo yum remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-engine
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 配置yum源
    sudo yum install -y yum-utils
    sudo yum-config-manager \
    	--add-repo \
    	https://download.docker.com/linux/centos/docker-ce.repo
    
    • 1
    • 2
    • 3
    • 4
    • 安装docker
    sudo yum install -y docker-ce docker-ce-cli containerd.io
    
    • 1
    • 启动
    systemctl enable docker --now
    
    • 1
    • 配置加速
    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
    	"registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"],
    	"exec-opts": ["native.cgroupdriver=systemd"],
    	"log-driver": "json-file",
    	"log-opts":{
    		"max-size": "100m"
    	},
    	"storage-driver": "overlay2"
    }
    EOF
    
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    kubeadm创建集群

    安装要求:

    • 一台兼容的linux主机,kubernetes项目为基于debian和redhat的Linux发行版以及一些不提供包管理工具的发行版提供通用的指令;
    • 每台机器2CB或者更多的RAM(如果少于这个数字将会影响你应用的运行内存);
    • 2CPU核或更多;
    • 集群中的所有机器的网络彼此均能相互连接;
    • 设置防火墙放行规则;
    • 节点之中不可以有重复的主机名、MAC地址或product_uuid;
    • 设置不同的hostname;
    • 开启机器上的某些端口;
    • 禁用交换分区(永久关闭),为了保障kubelet正常工作;

    基础环境

    所有机器执行以下命令:

    // k8s-master k8s-node1 k8s-node2
    hostnamectl set-hostname xxx
    
    // 将SELinux设置为permissive模式(相当于将其禁用)
    sudo setenforce 0
    sudo sed -i 's/^SELINUX=enforcing$/SELINUX=premissive/' /etc/selinux/config
    
    // 关闭swap
    swapoff -a
    sed -ri 's/.*swap.*/#&/' /etc/fstab
    
    # 允许iptables检查桥接流量
    cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
    br_netfilter
    EOF
    
    cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    EOF
    sudo sysctl --system
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    安装kubectl、kubeadm、kubelet

    cat <<EOF | sudo tee /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
    gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
    	http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    exclude=kubelet kubeadm kubectl
    EOF
    
    sudo yum install -y kubelet-1.20.9 kubeadm-1.20.9 kubectl-1.20.9 --disableexcludes=kubernetes
    
    sudo systemctl enable --now kubelet
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    使用kubeadm引导集群

    • 下载各个机器需要的镜像:
    sudo tee ./images.sh <<-'EOF'
    #!/bin/bash
    images={
    kube-apiserver:v1.20.9
    kube-proxy:v1.20.9
    kube-controller-manager:v1.20.9
    kube-scheduler:v1.20.9
    coredns:1.7.0
    etcd:3.4.13-0
    pause:3.2
    }
    for imageName in ${image[@]} ; do
    docker pull registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/$imageName
    done
    EOF
    
    chmod +x ./images.sh && ./images.sh
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 初始化主节点
    # 所有机器添加master域名映射(改为自己的)
    echo "172.31.0.2 cluster-endpoint" >> /etc/hosts
    
    # 主节点运行
    kubeadm init \
    --apiserver-advertise-address=172.31.0.2 \
    --control-plane-endpoint=cluster-endpoint \
    --image-repository registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images \
    --kubernetes-version v1.20.9 \
    --service-cidr=10.96.0.0/16 \
    --pod-network-cidr=192.168.0.0/16
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 根据提示继续
    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
    • 1
    • 2
    • 3
    • worker节点加入集群
    # worker节点执行master命令输出的命令(24小时有效)
    kubeadm join cluster-endpoint:6443 --token xxxxx \
    	--discovery-token-ca-cert-hash xxxx
    
    • 1
    • 2
    • 3

    新令牌:在master节点运行命令kubeadm token create --print-join-command

    部署dashboard

    kubernetes官方提供的可视化界面,master执行

    kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml
    
    • 1

    设置访问端口:

    kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard
    
    • 1

    将type: ClusterIP改为type: NodePort

    kubectl get svc -A | grep kubernetes-dashboard
    # 找到端口,在安全组放行
    
    • 1
    • 2

    访问:https://集群任意IP:端口

    创建访问账号:

    vi dash.yaml
    
    apiVersion: v1
    kind: ServiceAccount
    metadata: 
      name: admin-user
      namespace: kubernetes-dashboard
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata: 
      name: admin-user
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: cluster-admin
    subject:
      - kind: ServiceAccount
        name: admin-user
        namespace: kubernetes-dashboard 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    kubectl apply -f dash.yaml
    
    • 1

    令牌访问:

    # 获取访问令牌
    kubectl -n kubernetes-dashboard get secret ${kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath="{.secret[0].name}"} -o go-template="{{.data.token | base64decode}}"
    
    • 1
    • 2

    在这里插入图片描述

  • 相关阅读:
    Qt 大型工程项目的搭建过程,模块分类详解
    编译链接(Compile Link)
    QTableWidget中cell 和 item区别
    【计算机网络】网络编程接口 Socket API 解读(10)
    oracle的序列和触发器
    HTTPS - 揭秘 TLS 1.2 协议完整握手过程--此文为转发文,一定要结合wirshark工具看,很清楚
    数据透视表上线!如何在纯前端实现这个强大的数据分析功能?
    谷歌浏览器误代码STATUS_INVALID_IMAGE_HASH如何一行代码解决
    Flutter组件-Material属性
    Ubuntu系统硬盘挂载
  • 原文地址:https://blog.csdn.net/qq_41242680/article/details/126448323