美文网首页
【Windows+虚拟机】Kubeadm方式搭建单master的

【Windows+虚拟机】Kubeadm方式搭建单master的

作者: 李白开水 | 来源:发表于2021-03-30 20:21 被阅读0次

    田田田

    一、准备工作

    1、准备三台虚拟机,系统为CentOS7.x,一台用作master节点,另外两台作为node节点

    • 虚拟机硬件配置
      • 2GB或更多RAM
      • 2个或更多CPU
      • 硬盘30G或更多
    • 三台虚拟机之间可以互通
    • 虚拟机可以访问外网
    • 禁止三台虚拟机的swap分区

    2、三台虚拟机网络设置办法(供参考)

    • 桥接模式(选择对应的网卡)
    • 更改/etc/sysconfig/network-scripts/ifcfg-ens33文件的ONBOOT为yes
    • 重启网络服务service network restart

    3、关闭三台虚拟机的防火墙

    # 临时关闭
    $ systemctl stop firewalld
    # 永久关闭
    $ systemctl disable firewalld
    

    4、关闭三台虚拟机的selinux

    # 永久关闭
    $ sed -i 's/enforcing/disabled/' /etc/selinux/config
    # 临时关闭
    $ setenforce 0
    

    5、关闭三台虚拟机的swap

    $ swapoff -a 
    $ sed -ri 's/.*swap.*/#&/' /etc/fstab
    

    6、根据规划设置三台虚拟机的主机名

    $ hostnamectl set-hostname <hostname>
    

    例如

    image-20210330140111829.png

    可以用hostname命令来查看设置的主机名

    7、在 master 添加 hosts(只在master主机上执行)

    $ cat >> /etc/hosts << EOF
    192.168.30.242 master
    192.168.30.176 node01
    192.168.30.149 node02
    EOF
    

    例如

    image-20210330140432183.png

    8、在三台虚拟机上将桥接的 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 
    

    例如

    image-20210330140659006.png

    9、设置三台虚拟机的时间和Windows时间同步

    $ yum install ntpdate -y
    $ ntpdate time.windows.com
    

    二、安装Docker、kubeadm、kubelet

    2.1. 安装Docker

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

    三台虚拟机都要安装。

    $ wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
    # 安装docker
    $ yum -y install docker-ce-18.06.1.ce-3.el7
    # 启动docker 并添加开机启动
    $ systemctl enable docker && systemctl start docker
    # 查看安装的docker版本,返回版本即安装成功
    $ docker --version
    

    如果虚拟机没有wget命令,使用yum install wget安装wget命令。

    2.2. 添加阿里云 YUM 软件源

    三台虚拟机都要添加

    # 设置仓库地址
    $ cat > /etc/docker/daemon.json << EOF
    {
    "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
    } 
    EOF
    
    # 重启docker
    $ systemctl restart docker
    
    # 添加 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
    

    可以使用docker info命令来查看仓库地址是否修改成功

    image-20210330142425313.png

    2.3. 安装 kubeadm, kubelet 和 kubectl

    # 不指定版本,则安装最新的
    $ yum install -y kubelet kubeadm kubectl
    # 设置开机启动
    $ systemctl enable kubelet
    

    三、部署 Kubernetes Master

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

    在Master主机上执行(只在master主机上执行

    $ kubeadm init \
    --apiserver-advertise-address=0.0.0.0 \
    --image-repository registry.aliyuncs.com/google_containers \
    --kubernetes-version v1.20.0 \
    --service-cidr=10.96.0.0/12 \
    --pod-network-cidr=10.244.0.0/16
    

    命令参数说明(为了更好的理解命令)

    # 初始化 Control-plane/Master 节点
    kubeadm init \
        --apiserver-advertise-address 0.0.0.0 \
        # API 服务器所公布的其正在监听的 IP 地址,指定“0.0.0.0”以使用默认网络接口的地址
        # 切记只可以是内网IP,不能是外网IP,如果有多网卡,可以使用此选项指定某个网卡
        --apiserver-bind-port 6443 \
        # API 服务器绑定的端口,默认 6443
        --cert-dir /etc/kubernetes/pki \
        # 保存和存储证书的路径,默认值:"/etc/kubernetes/pki"
        --control-plane-endpoint kuber4s.api \
        # 为控制平面指定一个稳定的 IP 地址或 DNS 名称,
        # 这里指定的 kuber4s.api 已经在 /etc/hosts 配置解析为本机IP
        --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \
        # 选择用于拉取Control-plane的镜像的容器仓库,默认值:"k8s.gcr.io"
        # 因 Google被墙,这里选择国内仓库
        --kubernetes-version 1.20.4 \
        # 为Control-plane选择一个特定的 Kubernetes 版本, 默认值:"stable-1"
        --node-name master01 \
        #  指定节点的名称,不指定的话为主机hostname,默认可以不指定
        --pod-network-cidr 10.10.0.0/16 \
        # 指定pod的IP地址范围
        --service-cidr 10.20.0.0/16 \
        # 指定Service的VIP地址范围
        --service-dns-domain cluster.local \
        # 为Service另外指定域名,默认"cluster.local"
        --upload-certs
        # 将 Control-plane 证书上传到 kubeadm-certs Secret
    

    安装成功

    显示successfully即是安装成功,提示信息里还给出了接下来要执行的命令,可以在执行这些命令前,通过docker images 命令查看init过程拉取了哪些镜像

    当前图片只是指出接下来要执行的命令的提示位置,先不用执行图片中标明的命令


    image-20210330152252093.png

    docker images查看拉取的镜像

    image-20210330143753009.png

    接下来要执行的命令,在命令行有提示

    image-20210330143935363.png
    命令如下
    只在master节点上执行
    $ 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
    

    再在两个node虚拟机上执行这一行命令

    image-20210330151054468.png
    kubeadm join 192.168.30.242:6443 --token jwmvm2.2re7i8qn2babk33r \
        --discovery-token-ca-cert-hash sha256:0666829988b6b99665c397983e8d03833d98bc3a4dce4891457459ee9b6e97a7
    

    执行结果

    image-20210330152314451.png

    在master上查看node

    $ kubectl get nodes
    

    node节点已经加入了,但是当前状态是NotReady的

    image-20210330152346099.png

    四、部署CNI网络插件

    在master主机上执行
    方式1:

    # 源是国外源,可以寻找国内源或多重试几次
    $ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    
    $ kubectl get pods -n kube-system
    

    方式2:把yaml文件拉到本地,再 kubectl apply -f 文件

    image-20210330154133997.png

    执行后再次查看各node状态

    $ kubectl get nodes
    

    结果


    image-20210330154253079.png

    五、测试

    在 Kubernetes 集群中创建一个 pod, 验证是否正常运行(在master主机执行)

    # 创建pod
    $ kubectl create deployment nginx --image=nginx
    # 对外暴露端口
    $ kubectl expose deployment nginx --port=80 --type=NodePort
    # 列出当前命名空间下的所有pod,services
    $ kubectl get pod,svc
    # 扩展
    $ kubectl scale deployment nginx --replicas=2
    

    运行结果

    image-20210330154945864.png

    这时候使用浏览器访问任意两台node虚拟机的ip+nginx的开放端口31975,都可以访问到nginx。


    image-20210330155818943.png

    相关文章

      网友评论

          本文标题:【Windows+虚拟机】Kubeadm方式搭建单master的

          本文链接:https://www.haomeiwen.com/subject/nlaghltx.html