环境准备,首先我们准备两台服务器,一台为master,一台为node

  1. 条件准备(所有服务器都执行)
    1.1 关闭防火墙
    1.2. 关闭selinux,修改/etc/selinux/config
    1.3 关闭swap(内存交换)
    1.4 hosts文件添加各个服务器主机名(这里使用两台128和129,128为master,129为node)
    1.5 配置内核参数,将桥接的IPv4流量传递到iptables的链
# 1.1
systemctl stop firewalld
systemctl disable firewalld
# 1.2
set -i 's/enforcing/disabled' /etc/selinux/config
setenforce 0
# 1.3
swapoff -a #临时
sed -ri 's/.*.swap.*/#&/' /etc/fstab  #永久
# 1.4 
nano /etc/hosts
192.168.31.128  k8s-node1
192.168.31.129  k8s-node2
# 1.5
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF

sysctl --system

如何创建k8sdocker仓库_如何创建k8sdocker仓库


如何创建k8sdocker仓库_docker_02

  1. 安装docker(所有服务器都执行)
# 卸载docker
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine

# 安装依赖
yum install -y yum-utils \
           device-mapper-persistent-data \
           lvm2

# 添加yum源
sudo yum-config-manager \
    --add-repo \
    https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo

# 安装docker以及docker-cli
sudo yum install -y docker-ce docker-ce-cli containerd.io

# 配置docker阿里云镜像加速并设置开机自启
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://zoo2pivc.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl enable docker

注:这里配置加速后可能启动不起来,卸载掉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

rm -rf /etc/systemd/system/docker.service.d
rm -rf /var/lib/docker
rm -rf /var/run/docker
rm -rf /etc/docker/daemon.json

参考阿里官网https://developer.aliyun.com/article/29941,需要进行一下配置

sudo cp -n /lib/systemd/system/docker.service /etc/systemd/system/docker.service
sudo sed -i "s|ExecStart=/usr/bin/docker daemon|ExecStart=/usr/bin/docker daemon --registry-mirror=<your accelerate address>|g" /etc/systemd/system/docker.service
sudo sed -i "s|ExecStart=/usr/bin/dockerd|ExecStart=/usr/bin/dockerd --registry-mirror=<your accelerate address>|g" /etc/systemd/system/docker.service
sudo systemctl daemon-reload
sudo service docker restart

这里把your accelerate address换成自己的镜像加速地址就可以了,记得去掉<>

sudo cp -n /lib/systemd/system/docker.service /etc/systemd/system/docker.service
sudo sed -i "s|ExecStart=/usr/bin/docker daemon|ExecStart=/usr/bin/docker daemon --registry-mirror=https://zoo2pivc.mirror.aliyuncs.com|g" /etc/systemd/system/docker.service
sudo sed -i "s|ExecStart=/usr/bin/dockerd|ExecStart=/usr/bin/dockerd --registry-mirror=https://zoo2pivc.mirror.aliyuncs.com|g" /etc/systemd/system/docker.service
sudo systemctl daemon-reload
sudo service docker restart
  1. 配置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
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
  1. 安装kubeadm、kubelet和kubectl(所有服务器都执行)
    Kubelet负责与其他节点集群通信,并进行本节点Pod和容器生命周期的管理。
    Kubeadm是Kubernetes的自动化部署工具,降低了部署难度,提高效率。
    Kubectl是Kubernetes集群管理工具。
yum install -y kubelet-1.17.3 kubeadm-1.17.3 kubectl-1.17.3
systemctl enable kubelet
systemctl start kubelet
  1. 部署k8s-master(128执行)
    先执行master_images.sh文件,文件内容为
#!/bin/bash

images=(
	kube-apiserver:v1.17.3
	kube-proxy:v1.17.3
	kube-controller-manager:v1.17.3
	kube-scheduler:v1.17.3
	coredns:1.6.5
	etcd:3.4.3-0
	pause:3.1
)

for imageName in ${images[@]}; do
	docker pull /google_containers/$imageName
done

这里注意,如果是在windows下面编辑的sh文件,需要执行sed -i 's/\r$//' master_images.sh,这是因为在Windows下每一行结尾是\n\r,而Linux下则是\n,所以才会有 多出来的\r。否则会报/bin/bash^M: 坏的解释器: 没有那个文件或目录错误。

master节点初始化,这里的apiserver-advertise-address为当前主机的ip,service和pod用默认就好

kubeadm init \
--apiserver-advertise-address=192.168.31.128 \
--image-repository=/google_containers \
--kubernetes-version=1.17.3 \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16

如何创建k8sdocker仓库_如何创建k8sdocker仓库_03


然后执行上面提示的三句话,用于使用集群

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,即我们需要先部署一个pod网络,具体可以参考官网https://kubernetes.io/docs/concepts/cluster-administration/addons/,官网里提供了很多种网络,这里我们使用flannel

如何创建k8sdocker仓库_如何创建k8sdocker仓库_04


我们通过yml文件来配置网络,yml文件会在后面给出

# 应用
kubectl apply -f kube-flannel.yml
# 删除网络
kubectl delete -f kube-flannel.yml

如何创建k8sdocker仓库_k8s_05


运行完等待3分钟,查看所有名称空间的pods,并且flannel已经是运行状态

kubectl get pods --all-namespaces

如何创建k8sdocker仓库_linux_06


然后我们执行kubeadm join命令来添加node,上面的执行命令经过一段时间会过期,我们需要执行kubeadm token create --print-join-command命令重新生成一个

如何创建k8sdocker仓库_linux_07

kubeadm join 192.168.31.128:6443 --token o3h63q.frdnfzr27x8z4fbp     --discovery-token-ca-cert-hash sha256:8d17d9c5040554396d49d49d8a04bfe6872869e7806c8a8b5327426f1c9e2b9f

我们将这个命令在129服务器里执行,也就是将129添加到集群里

如何创建k8sdocker仓库_如何创建k8sdocker仓库_08


如果某些原因需要重新执行join语句,则先执行kubeadm reset 添加好以后,可以查看所有节点信息,发现添加完以后有两个节点了,但是我们发现状态为notReady,需要稍等一会

kubectl get nodes

如何创建k8sdocker仓库_如何创建k8sdocker仓库_09


再次查看发现变为ready状态了

如何创建k8sdocker仓库_docker_10

执行watch kubectl get pod -n kube-system -o wide监控pod进度,可就是查看节点状态详情

如何创建k8sdocker仓库_如何创建k8sdocker仓库_11


可以看到全部为running,也就是ready了。

至此集群搭建完毕,如果需要添加节点,则重复1,2,3,4步骤后,再执行kubeadm join命令即可。