基于 vagrant 的 k8s 安装过程

使用 vagrant 创建三个虚拟机

  1. 安装我们即将用到的工具
    1
    yum install git vim java groovy net-tools -y

安装 docker-ce

  1. 我们使用阿里云的 docker-ce 源代来安装
    1
    2
    # 安装最新版本
    yum install docker-ce

我们安装 k8s 相关命令行工具

  1. 添加 k8s 的 aliyun 的 yum 源, 编译

    1
    2
    3
    4
    5
    6
    7
    8
    9
    vi /etc/yum.repos.d/kubernetes.repo
    # 加入如下内容
    [kubernetes]
    name=Kubernetes
    baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
    enabled=1
    gpgcheck=1
    repo_gpgcheck=1
    gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
  2. 安装相关命令行工具

    1
    yum install -y kubeadm kubectl kubelet
  3. 将 kubelet 加入到服务

    1
    systemctl enable kubelet

设置系统

  1. 关闭防火墙

    1
    2
    systemctl stop firewalld
    systemctl disable firewalld
  2. 关闭交换分区

    1
    2
    swapoff -a
    sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
  3. 关闭 selinux

    1
    2
    3
    setenforce 0
    # 编辑 /etc/selinux/config 加入一行
    SELINUX=disabled
  4. 禁止 iptables 对 bridge 数据进行处理

    1
    2
    3
    4
    5
    cat <<EOF >  /etc/sysctl.d/k8s.conf
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    EOF
    sysctl -p /etc/sysctl.d/k8s.conf

安装 k8s-master

  1. 获取镜像

    1
    2
    3
    git clone https://github.com/hellojukay/k8s-sync.git
    cd k8s-sync
    groovy pull.groovy
  2. 启动 kubelet

    1
    systemctl start kubelet
  3. 启动安装

    1
    kubeadm init --kubernetes-version=v1.14.1 --pod-network-cidr 10.244.0.0/16 --apiserver-advertise-address=192.168.199.101
  4. 初始化成功

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Your Kubernetes control-plane has initialized successfully!

    To start using your cluster, you need to run the following as a regular user:

    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config

    You should now deploy a pod network to the cluster.
    Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
    https://kubernetes.io/docs/concepts/cluster-administration/addons/

    Then you can join any number of worker nodes by running the following on each as root:

    kubeadm join 10.0.2.15:6443 --token 93rvon.wr2c96zgz0jbux4g \
    --discovery-token-ca-cert-hash sha256:4ce658fcbfef4c1dfb9a8550f144765cba8eb65d6704d44e8f2f543b5203857a

如果这个 token 你忘记了,或者失效了, 可以通过 kubeadm token create 在创建一个新的.
按照提示, 退出 root 账户

使用前初始化

  1. 拷贝配置

    1
    2
    3
    4
    [vagrant@node1 ~]$   mkdir -p $HOME/.kube
    [vagrant@node1 ~]$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    [vagrant@node1 ~]$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
    [vagrant@node1 ~]$
  2. 添加一个网络 pod

    1
    2
    kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/k8s-manifests/kube-flannel-rbac.yml
  3. 查看一下

    1
    2
    3
    4
    5
    6
    7
    8
    [vagrant@node1 ~]$ kubectl get node
    NAME STATUS ROLES AGE VERSION
    node1 NotReady master 6m24s v1.14.1
    [vagrant@node1 ~]$
    ```
    4. 生成 join 命令
    ```shell
    kubeadm join 192.168.59.101:6443 --token x08flq.zkeyh91keapret3j --discovery-token-ca-cert-hash sha256:440583f9880090176349b6b18647b71aa12c9e139db70cfb537f40fd6d774f95

一些坑

k8s.gcr.io/pause 和 quay.io/coreos/flannel 这两个镜像的服务都是 deamonSet , 所以在所有节点上都需要部署.