前言

写在开始之前:官网的东西才是最好的,大家可以参照官网:

官网:https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/#installing-kubeadm-kubelet-and-kubectl

GitHub:https://github.com/kubernetes/kubeadm

但官网有一些镜像的拉取是不适合大家的,本篇介绍的K8S集群搭建,完全不需要科学上网,下面开始我们的搭建之旅:

1 、前期准备

使用kubeadm搭建一个3台机器组成的k8s集群,1台master节点,2台worker节点

1.1 使用的版本

Docker       18.09.0
---
kubeadm-1.14.0-0 
kubelet-1.14.0-0 
kubectl-1.14.0-0
---
k8s.gcr.io/kube-apiserver:v1.14.0
k8s.gcr.io/kube-controller-manager:v1.14.0
k8s.gcr.io/kube-scheduler:v1.14.0
k8s.gcr.io/kube-proxy:v1.14.0
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.3.10
k8s.gcr.io/coredns:1.3.1
---
calico:v3.9

1.2 准备3台centos机器

最低配置要求:

master节点的最少是2核2G,work节点可以是1核2G;

1.3 更新并安装依赖

在3台机器上运行

yum -y update
yum install -y conntrack ipvsadm ipset jq sysstat curl iptables libseccomp

2、安装Docker

在每一台机器上安装Docker,版本为18.09.0

01 安装必要的依赖
	sudo yum install -y yum-utils device-mapper-persistent-data  lvm2     
02 设置docker仓库
	sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
	
【需要设置一下阿里云镜像加速器】
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["镜像加速器地址"](登录阿里云账号,搜索镜像加速器)
}
EOF
sudo systemctl daemon-reload

03 安装docker
  yum install -y docker-ce-18.09.0 docker-ce-cli-18.09.0 containerd.io
04 启动docker
	sudo systemctl start docker && sudo systemctl enable docker
  • 镜像加速器:
    在这里插入图片描述

3 、系统基础前提配置

由于我搭建k8s集群的目的是供学习使用,所以直接关闭了机器上的防火墙等其他操作,在生产环境上需要根据实际情况开启一些端口;

# (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

4、k8s组件安装

4.1 Installing kubeadm, kubelet and kubectl

(1)配置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

(2)安装kubeadm&kubelet&kubectl

yum install -y kubeadm-1.14.0-0 kubelet-1.14.0-0 kubectl-1.14.0-0

(3)docker和k8s设置同一个cgroup

# docker
vi /etc/docker/daemon.json
#在daemon.json里添加如下内容:

"exec-opts": ["native.cgroupdriver=systemd"],
    
systemctl restart docker
    
# kubelet,这边如果发现输出directory not exist,也说明是没问题的,大家继续往下进行即可
sed -i "s/cgroup-driver=systemd/cgroup-driver=cgroupfs/g" /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
  [root@Henry003 ~]# sed -i "s/cgroup-driver=systemd/cgroup-driver=cgroupfs/g" /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
    sed: can't read /etc/systemd/system/kubelet.service.d/10-kubeadm.conf: No such file or directory
systemctl enable kubelet && systemctl start kubelet

4.2 proxy/pause/scheduler等国内镜像

(1)查看kubeadm使用的镜像

kubeadm config images list

可以发现这里都是国外的镜像

k8s.gcr.io/kube-apiserver:v1.14.0
k8s.gcr.io/kube-controller-manager:v1.14.0
k8s.gcr.io/kube-scheduler:v1.14.0
k8s.gcr.io/kube-proxy:v1.14.0
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.3.10
k8s.gcr.io/coredns:1.3.1

(2)解决国外镜像不能访问的问题

  • 创建kubeadm.sh脚本,用于拉取镜像/打tag/删除原有镜像
    vim kubeadm.sh
    #!/bin/bash
    
    set -e
    
    KUBE_VERSION=v1.14.0
    KUBE_PAUSE_VERSION=3.1
    ETCD_VERSION=3.3.10
    CORE_DNS_VERSION=1.3.1
    
    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  #打tag
      docker rmi $ALIYUN_URL/$imageName  #删除镜像,使用打tag的镜像即可
    done
  • 运行脚本和查看镜像

    运行脚本

    sh ./kubeadm.sh

    查看镜像

    docker images

      REPOSITORY                           TAG                 IMAGE ID            CREATED             SIZE
      k8s.gcr.io/kube-proxy                v1.14.0             5cd54e388aba        9 months ago        82.1MB
      k8s.gcr.io/kube-apiserver            v1.14.0             ecf910f40d6e        9 months ago        210MB
      k8s.gcr.io/kube-scheduler            v1.14.0             00638a24688b        9 months ago        81.6MB
      k8s.gcr.io/kube-controller-manager   v1.14.0             b95b1efa0436        9 months ago        158MB
      k8s.gcr.io/coredns                   1.3.1               eb516548c180        11 months ago       40.3MB
      k8s.gcr.io/etcd                      3.3.10              2c4adeb21b4f        12 months ago       258MB
      k8s.gcr.io/pause                     3.1                 da86e6ba6ca1        2 years ago         742kB
      
    
    

4.3 push镜像

可以将这些镜像推送到自己的阿里云仓库【可选,根据自己实际的情况】

# 登录自己的阿里云仓库
docker login --username=xxx(自己的用户名) registry.cn-hangzhou.aliyuncs.com
# 创建kubeadm-push-aliyun.sh文件
vi kubeadm-push-aliyun.sh

#!/bin/bash

set -e

KUBE_VERSION=v1.14.0
KUBE_PAUSE_VERSION=3.1
ETCD_VERSION=3.3.10
CORE_DNS_VERSION=1.3.1

GCR_URL=k8s.gcr.io
ALIYUN_URL=registry.cn-hangzhou.aliyuncs.com/123456(这里填写自己的用户名)

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 tag $GCR_URL/$imageName $ALIYUN_URL/$imageName
  docker push $ALIYUN_URL/$imageName
  docker rmi $ALIYUN_URL/$imageName
done

运行脚本 sh ./kubeadm-push-aliyun.sh

继续安装请查看:
https://blog.csdn.net/qq_33996921/article/details/103649020

Logo

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

更多推荐