• k8s 集群安装


    kubeadm

    kubeadm 是官方社区推出的一个用于快速部署 kubernetes 集群的工具。这个工具能通过两条指令完成一个 kubernetes 集群的部署

    # 创建一个 Master 节点
    $ kubeadm init
    # 将一个 Node 节点加入到当前集群中
    $ kubeadm join <Master 节点的 IP 和端
    
    • 1
    • 2
    • 3
    • 4

    前置要求

    一台或多台机器,操作系统 CentOS7.x-86_x64
    硬件配置:2GB 或更多 RAM,2 个 CPU 或更多 CPU,硬盘 30GB 或更多集群中所有机器之间网络互通
    可以访问外网,需要拉取镜像
    禁止 swap 分区

    部署步骤

    1. 在所有节点上安装 Docker 和 kubeadm
    2. 部署 Kubernetes Master
    3. 部署容器网络插件
    4. 部署 Kubernetes Node,将节点加入 Kubernetes 集群中
    5. 部署 Dashboard Web 页面,可视化查看 Kubernetes 资源
      在这里插入图片描述

    环境准备

    准备工作
    • 我们可以使用 vagrant 快速创建三个虚拟机。虚拟机启动前先设置 virtualbox 的主机网
      络。现全部统一为 192.168.56.1,以后所有虚拟机都是 56.x 的 ip 地址
      创建虚拟机的vagrant文件如下
    Vagrant.configure("2") do |config|
    	(1..3).each do |i|
    		config.vm.define "k8s-node#{i}" do |node|
    		#设置虚拟机的Box
    			node.vm.box_url = "https://mirrors.ustc.edu.cn/centos-cloud/centos/7/vagrant/x86_64/images/CentOS-7.box"
    			node.vm.box="centos/7"
    
    			#设置虚拟机的主机名
    			node.vm.hostname="k8s-node#{i}"
    			#设置虚拟机的IP
    			node.vm.network "private_network",ip: "192.168.56.#{99+i}", netmask: "255.255.255.0"
    			
    			#VirtaulBox相关配置
    			node.vm.provider "virtualbox" do |v|
    				v.name="k8s-node#{i}"
    				v.memory=4096
    				v.cpus=4
    			end
    		end
    	end
    end
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    配置网络 virtualbox ->管理->主机网络管理器
    在这里插入图片描述
    最终虚拟机有两个网卡
    网卡1真正联网
    在这里插入图片描述
    网卡2是为了本机连接方便
    在这里插入图片描述

    #cmd中连接
    vagrant ssh XXX 进去系统之后
    
    • 1
    • 2

    在这里插入图片描述

    #切换root用户
    su root 密码为 vagrant
    
    • 1
    • 2

    在这里插入图片描述

    #编辑配置
    vi /etc/ssh/sshd_config
    修改 PasswordAuthentication yes/no
    重启服务 service sshd restart
    
    • 1
    • 2
    • 3
    • 4
    • 利用xshell进行连接
      ip 192.168.56100-102
      用户名为root
      密码为vagrant
    linux更改配置操作
    #查看网卡
    ip route show
    
    • 1
    • 2
    • 由于网卡ip一样,所以创建NAT网络网卡
      全局设定->网络->右上角添加

      为每一个结点设置NAT网络
      在这里插入图片描述
    • 测试NAT是否设置成功
    #查看使用的网卡 例如我的是eth0
    #查看每个节点的ip eth0地址
    ip addr
    #互相ping
    ping ip
    #再ping 百度
    ping www.baidu.com
    #如果都ping成功则配置成功
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 关闭防火墙
    systemctl stop firewalld
    systemctl disable firewalld
    
    • 1
    • 2
    • 关闭linux 安全策略 selinux
    #查看配置
    cat /etc/selinux/config
    #禁用
    sed -i 's/enforcing/disabled/' /etc/selinux/config
    #进全局
    setenforce 0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 关闭内存交换 swap
    #临时的
    swapoff -a
    #配置永久的
    sed -ri 's/.*swap.*/#&/' /etc/fstab
    #查看配置
    cat /etc/fstab
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 添加主机名与 IP 对应关系
    vi /etc/hosts
    10.0.2.15 k8s-node1
    10.0.2.4 k8s-node2
    10.0.2.5 k8s-node3
    
    指定hostname 
    hostnamectl set-hostname <newhostname>:指定新的 hostnam
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 将桥接的 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    安装Docker kubeadm kubelet kubectl
    • 安装 docker
    #1. 卸载系统之前的 docker
    sudo yum remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-engine
    #2.安装 Docker-CE
    #安装必须的依赖
    sudo yum install -y yum-utils \
    device-mapper-persistent-data \
    lvm2
    #设置 docker repo 的 yum 位置
    sudo yum-config-manager \
    	--add-repo \
    	http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    #安装 docker,以及 docker-cli
    sudo yum install -y docker-ce docker-ce-cli containerd.io
    #3、配置 docker 加速
    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://90iechnf.mirror.aliyuncs.com"]
    }
    EOF
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    
    #4、启动 docker & 设置 docker 开机自启
    systemctl enable docke
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 添加阿里云 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 安装 kubeadm,kubelet 和 kubectl
    yum list|grep kube
    yum install -y kubelet-1.17.3 kubeadm-1.17.3 kubectl-1.17.3
    systemctl enable kubelet
    systemctl start kubelet
    
    • 1
    • 2
    • 3
    • 4

    部署 k8s-master

    • master 节点初始化
      将k8s文件夹上传到虚拟机 进入目录 (文件 参考我的gulimall gitee文档下)
    #对master_images.sh修改权限 
    chomd 700 master_images.sh
    #执行下载
    ./master_images.sh 
    #检查镜像是否下载完成 docker images
    
    • 1
    • 2
    • 3
    • 4
    • 5

    下载完成后进行初始化

    #apiserver-advertise-address=主机上网ip 
    #由于默认拉取镜像地址 k8s.gcr.io 国内无法访问,这里指定阿里云镜像仓库地址。可以手动按照我们的 images.sh 先拉取镜像,地址变为 registry.aliyuncs.com/google_containers 也可以。
    #pod是最小的部署单元
    #service 对pod提供负载均衡 是多个pod的组合
    
    kubeadm init \
    --apiserver-advertise-address=10.0.2.15 \
    --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \
    --kubernetes-version v1.17.3 \
    --service-cidr=10.96.0.0/16 \
    --pod-network-cidr=10.244.0.0/16
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    成功后要执行以下两个步骤
    在这里插入图片描述
    科普:无类别域间路由(Classless Inter-Domain Routing、CIDR)是一个用于给用户分配 IP
    地址以及在互联网上有效地路由 IP 数据包的对 IP 地址进行归类的方法。
    拉取可能失败,需要下载镜像。
    运行完成提前复制:加入集群的令牌

    1. 测试 kubectl(主节点执行)
    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
    1. 安装 Pod 网络插件(CNI)
    kubectl apply -f \
    https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    
    • 1
    • 2

    以上地址可能被墙,大家获取上传我们下载好的 flannel.yml 运行即可(参考gulimall gitee 文档),同时 flannel.yml 中

    #由于制定好了flannel.yml文件所以只需要执行 安装
    kubectl apply -f kube-flannel.yml
    #删除命令为
    kubectl delete -f kube-flannel.yml
    
    • 1
    • 2
    • 3
    • 4

    指定的 images 访问不到可以去 docker hub 找一个
    wget yml 的地址
    vi 修改 yml 所有 amd64 的地址都修改了即可。
    等待大约 3 分钟

    kubectl get ns #查看名称空间
    kubectl get pods -n kube-system #查看指定名称空间的 pods
    kubectl get pods --all-namespaces #查看所有名称空间的 pods
    
    • 1
    • 2
    • 3

    网络成功状态
    在这里插入图片描述

    $ ip link set cni0 down 如果网络出现问题,关闭 cni0,重启虚拟机继续测试

    1. 目前 master 状态为 notready。等待网络加入完成即可。
    kubectl get nodes #在master节点获取所有节点
    
    • 1

    节点状态为ready 再往里加入其他节点
    在这里插入图片描述

    journalctl -u kubelet #查看 kubelet 日志
    
    • 1

    token两个小时会过期
    其他每一个节点加入master 节点

    kubeadm join 10.0.2.15:6443 --token hvlfqz.flbrb9ljn5i2bn3l \
        --discovery-token-ca-cert-hash sha256:04e66bbbe8db1c587042128531431388f4a5444a8cbea7bab4d6e64cdce5093a 
    
    • 1
    • 2

    执行 watch kubectl get pod -n kube-system -o wide 监控 pod 进度
    等 3-10 分钟,完全都是 running 以后继续
    Ctrl+C退出监控

    最终所有节点都变为Ready状态即成功
    在这里插入图片描述

    作者声明

    如有问题,欢迎指正!
    
    • 1
  • 相关阅读:
    【CAS:41994-02-9 |Biotinyl tyramide】生物素基酪氨酰胺价格
    房地产基础知识!!!
    n个数的全排列
    Impagliazzo five-worlds
    快应用(安卓)keystore 获得应用签名详细流程
    SpringCloud-OAuth2(二):实战篇
    ARM/DSP+FPGA运动控制机器视觉控制器方案定制
    经典排序——帮你解决关于排序的绝大多数问题
    Visual Studio部署C++矩阵库Armadillo的方法
    【2023年新版】40套BIM+GIS项目案例合集,中建中铁中交企业内部学习资源免费领取
  • 原文地址:https://blog.csdn.net/weixin_45247019/article/details/126019710