java---搭建 K8S 集群

搭建 K8S 集群[无需科学上网]

官网kubernetes.io/docs/setup/…

GitHubgithub.com/kubernetes/…

1、环境准备

 1.1、版本统一

Docker       20.10.16
---
kubeadm-1.20.15 
kubelet-1.20.15 
kubectl-1.20.15 
---
k8s.gcr.io/kube-apiserver:v1.20.15
k8s.gcr.io/kube-controller-manager:v1.20.15
k8s.gcr.io/kube-scheduler:v1.20.15
k8s.gcr.io/kube-proxy:v1.20.15
k8s.gcr.io/pause:3.2
k8s.gcr.io/etcd:3.4.13-0
k8s.gcr.io/coredns:1.7.0
---
calico:v3.9
复制代码

 1.2、准备 3 台 centos 服务器或者虚拟机

 大家根据自己的情况来准备 centos7 的虚拟机。

 要保证彼此之间能够 ping 通,也就是处于同一个网络中,虚拟机的配置要求不低于 2C4G , 2C2G 也能跑但是可能说内存比较紧张。

 1.3、更新并安装依赖

3台机器都需要执行,CV 大法就行,没有知识点。

yum -y update
yum install -y conntrack ipvsadm ipset jq sysstat curl iptables libseccomp
复制代码

 1.4、安装Docker

 每一台机器都需要进行安装,按照也比较简单。

  1. 安装必要的依赖

    sudo yum install -y yum-utils \
    device-mapper-persistent-data \
    lvm2
    复制代码
  2. 设置仓库源,这里使用的是阿里云的仓库

    sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    复制代码
  3. 设置阿里云镜像加速器

    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://st16o6r9.mirror.aliyuncs.com"]
    }
    EOF
    sudo systemctl daemon-reload
    复制代码
  4. 安装并启动 docker

    yum install -y docker-20.10.16 docker-ce-cli-20.10.16 containerd.io
    sudo systemctl start docker && sudo systemctl enable docker
    复制代码

 1.5、修改 hosts 文件

  • master 节点

    sudo hostnamectl set-hostname master
    
    vi /etc/hosts
    192.168.1.207 master
    192.168.1.241 node-1
    192.168.1.97 node-2
    复制代码
  • 两个 worker

    sudo hostnamectl set-hostname node-1
    sudo hostnamectl set-hostname node-2
    
    vi /etc/hosts
    192.168.1.207 master
    192.168.1.241 node-1
    192.168.1.97 node-2
    复制代码
  • 使用 ping 测试一下是否节点之间网络联通

    ping node-1
    ping node-2
    复制代码

 1.6、系统基础配置

  1. 关闭防火墙

    systemctl stop firewalld && systemctl disable firewalld
    复制代码
  2. 关闭 selinux

    setenforce 0
    sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
    复制代码
  3. 关闭 swap

    swapoff -a
    sed -i '/swap/s/^\(.*\)$/#\1/g' /etc/fstab
    复制代码
  4. 配置 iptables 的 ACCEPT 规则

    iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat && iptables -P FORWARD ACCEPT
    复制代码
  5. 设置系统参数

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

2、安装操作组件

  • 配置yum源

    cat <<EOF > /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
    repo_gpgcheck=0
    gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
           http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    EOF
    复制代码
  • 安装 kubeadm & kubelet & kubectl

    yum install -y kubeadm-1.20.15 kubelet-1.20.15 kubectl-1.20.15
    复制代码
  • docker 和 k8s 设置同一个 cgroup

    # 首先需要往之前创建的 docker/daemon.json 文件中追加写入 "exec-opts": ["native.cgroupdriver=systemd"] 属性值
    # 然后进行重启
    systemctl restart docker
    systemctl enable kubelet && systemctl start kubelet
    复制代码

3、下载需要镜像

  • 查看kubeadm使用的镜像

    kubeadm config images list

    可以发现打印出来的进行地址都是国外的,在国内进行直接拉取访问的话可能会遇见下载较慢、连接超时的问题,因此可以先将需要的镜像通过阿里云仓库进行加载。

  • 解决国外镜像不能访问的问题

    创建kubeadm.sh脚本,用于拉取所需镜像。

    #!/bin/bash
    
    set -e
    
    KUBE_VERSION=v1.20.15
    KUBE_PAUSE_VERSION=3.2
    ETCD_VERSION=3.4.13-0
    CORE_DNS_VERSION=1.7.0
    
    GCR_URL=k8s.gcr.io
    ALIYUN_URL=registry.cn-hangzhou.aliyuncs.com/google_containers
    
    images=(kube-proxy:${KUBE_VERSION}
    kube-scheduler:${KUBE_VERSION}
    kube-controller-manager:${KUBE_VERSION}
    kube-apiserver:${KUBE_VERSION}
    pause:${KUBE_PAUSE_VERSION}
    etcd:${ETCD_VERSION}
    coredns:${CORE_DNS_VERSION})
    
    for imageName in ${images[@]} ; do
      docker pull $ALIYUN_URL/$imageName
      docker tag  $ALIYUN_URL/$imageName $GCR_URL/$imageName
      docker rmi $ALIYUN_URL/$imageName
    done
    复制代码
  • 运行脚本和查看镜像

    # 运行脚本
    sh ./kubeadm.sh
    
    # 查看镜像
    docker images
    复制代码

3、创建集群

 3.1、初始化 master

官网:kubernetes.io/docs/refere…

注意此操作是在主节点上进行

kubeadm init --kubernetes-version=1.20.15 --apiserver-advertise-address=192.168.1.107 --pod-network-cidr=10.244.0.0/16
【若要重新初始化集群状态:kubeadm reset, 然后再进行上述操作, 注意这里的地址不能填公网地址, 不然重置不了】
复制代码
  • 初始化完成之后会打印很多的日志,其中需要将 join 的那条日志进行保存,因为需要在 node 节点中使用从而使从节点加入到集群当中。

 3.2、根据日志提示

 按照日子提示的内容将令牌这些生成信息进行保存替换,如果操作 controller 的环境和集群不在同一个环境中还需要将数据拷贝到对应的开发环境中使用。

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

此时kubectl cluster-info查看一下是否成功

 3.3、健康检查

curl -k https://localhost:6443/healthz
# 没有问题的话会返回一个 ok
复制代码

 3.4、部署 calico 网络插件

选择网络插件:kubernetes.io/docs/concep…

  • calico,同样在master节点上操作

    kubectl apply -f https://docs.projectcalico.org/v3.9/manifests/calico.yaml
    复制代码

4、子节点加入集群

这里需要使用初始化集群成功后的日志信息【注意这边大家要自己的,下面我的只是一个参考】

kubeadm join 192.168.1.207:6443 --token yu1ak0.2dcecvmpozsy8loh \
    --discovery-token-ca-cert-hash sha256:5c4a69b3bb05b81b675db5559b0e4d7972f1d0a61195f217161522f464c307b0
复制代码
  • node-1node-2 上执行上述命令,在master节点上检查集群信息
    kubectl get nodes
    
    NAME                   STATUS   ROLES    AGE     VERSION
    master-kubeadm-k8s     Ready    master   19m     v1.14.0
    worker01-kubeadm-k8s   Ready    <none>   3m6s    v1.14.0
    worker02-kubeadm-k8s   Ready    <none>   2m41s   v1.14.0
    复制代码

猜你喜欢

转载自juejin.im/post/7105254260413038599