部署架构说明

非高可用版本

  1. master集群
    • 192.168.8.40(master_01)
  2. node节点
    • 192.168.8.41(node_01)

必要的检查说明:

  • CentOS 7
  • hostname, MAC , product_uuid 唯一
  • 磁盘SWAP关闭
    • swapoff -a
    • sed -i ‘/ swap / s/^/#/’ /etc/fstab
  • 检查端口占用

    master节点

    ProtocolDirectionPort RangePurpose
    TCPInbound6443*Kubernetes API server
    TCPInbound2379-2380etcd server client API
    TCPInbound10250Kubelet API
    TCPInbound10251kube-scheduler
    TCPInbound10252kube-controller-manager
    TCPInbound10255Read-only Kubelet API

    node节点

    ProtocolDirectionPort RangePurpose
    TCPInbound10250Kubelet API
    TCPInbound10255Read-only Kubelet API
    TCPInbound30000-32767NodePort Services

配置yum源

由于google被墙,可以使用阿里云搭建的yum源

  • docker yum源
    cat >> /etc/yum.repos.d/docker.repo <<EOF
    [docker-repo]
    name=Docker Repository
    baseurl=http://mirrors.aliyun.com/docker-engine/yum/repo/main/centos/7
    enabled=1
    gpgcheck=0
    EOF

  • kubernetes 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
    EOF

开始正式安装

注:参考官网地址

  1. 安装Docker

    – 清空可能的docker 安装版本

    rm -f /var/lib/docker

    yum remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-selinux \
    docker-engine-selinux \
    docker-engine

    – 安装指定版本的docker

     Version v1.12 is recommended, but v1.11, v1.13 and 17.03 are known to work as well. Versions 17.06+ might work, but have not yet been tested and verified by the Kubernetes node team.
    

    yum install docker-1.12.6 -y
    systemctl enable docker && systemctl start docker

  2. 安装kubeadm、kubelet、kubectl

    setenforce 0
    yum install -y kubelet kubeadm kubectl
    systemctl enable kubelet && systemctl start kubelet

    cat <<EOF > /etc/sysctl.d/k8s.conf
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    EOF
    sysctl --system

  3. 确保 kubelet 和 docker 用的cgroup driver 是match的

    docker info | grep -i cgroup
    cat /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
    

    如果不match,修改kubelet
    sed -i "s/cgroup-driver=systemd/cgroup-driver=cgroupfs/g" /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

    然后重启kubelet

    systemctl daemon-reload
    systemctl restart kubelet
    
  4. 到了关键的一步了
    在master节点:192.168.8.40上执行

     kubeadm init --kubernetes-version=v1.19.6 --pod-network-cidr=10.244.0.0/16
    

    国内的话,一定会报错,gcr.io 是没有办法连接访问到的。这里你有两个办法解决。我们这里用docker save 、docker load 去解决吧,当然前提是你有能科学上网的的服务器,比如AWS云主机。
    这里写图片描述

    sudo docker save -o k8s.tar gcr.io/google_containers/kube-apiserver-amd64:v1.9.6 gcr.io/google_containers/kube-controller-manager-amd64:v1.9.6 gcr.io/google_containers/kube-proxy-amd64:v1.9.6 gcr.io/google_containers/kube-scheduler-amd64:v1.9.6 gcr.io/google_containers/etcd-amd64:3.1.11 gcr.io/google_containers/pause-amd64:3.0
    

    我这里准备了,V1.9.6版本的gcr.io 依赖镜像, 在百度云上。
    需要执行两个命令,分别是:

    docker load < k8s.tar
    docker load < k8s-net.tar
    

    这两个包在node节点也需要去load 一下,因为你还有kube-proxy需要下载,而这个镜像,也在gcr.io里。

    创建网络的组件,这里用flannel网络,刚才知道的cidr就是pod用到的cidr。

    kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.9.1/Documentation/kube-flannel.yml
    
  5. node加入集群

    在node节点上执行:

     kubeadm join --token <token> <master-ip>:<master-port> --discovery-token-ca-cert-hash sha256:<hash>
    

    如果你没保存kubeadm init 的命令,也不要慌:

    敲下:kubeadm token list拿到token 后:

    kubeadm join --token <token> <master-ip>:<master-port> --discovery-token-unsafe-skip-ca-verification
    
  6. check 一下

    作为root用户,执行下如下配置

    export KUBECONFIG=/etc/kubernetes/admin.conf

    这样当你执行kubectl时就不会找默认的localhost:8080了。

    kubectl get nodes

    可以看到 都是Ready的状态。

    跑个命令看看:
    `kubectl run my-nginx --image=nginx --replicas=2 --port=80
    过了会儿就可以发现:

    curl <pod-ip>

    <!DOCTYPE html>
        <html>
        <head>
        <title>Welcome to nginx!</title>
        <style>
            body {
                width: 35em;
                margin: 0 auto;
                font-family: Tahoma, Verdana, Arial, sans-serif;
            }
        </style>
        </head>
        <body>
        <h1>Welcome to nginx!</h1>
        <p>If you see this page, the nginx web server is successfully installed and
        working. Further configuration is required.</p>
        <p>For online documentation and support please refer to
        <a href="http://nginx.org/">nginx.org</a>.<br/>
        Commercial support is available at
        <a href="http://nginx.com/">nginx.com</a>.</p>
        <p><em>Thank you for using nginx.</em></p>
        </body>
        </html>
    

    至此,一个非高可用的k8s集群,由kubeadm 几乎一键部署了起来。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐