基于CENTOS7.6(分区时去除SWAP分区)
或者在系统中通过swapoff -a,并在/etc/fstab中注释swap分区
安装Docker,需要注意不是所有版本都可以,需要根据K8S的支持列表安装Docker,这里选择18.09.9
安装前置软件 yum install -y yum-utils device-mapper-persistent-data lvm2
设置Docker yum源 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
查看仓库中所有docker-ce版本 yum list docker-ce --showduplicates | sort -r
安装18.09.9 yum install docker-ce-18.09.9
启动docker systemctl enable docker && systemctl start docker
安装Kubeadm,通过Kubeadm安装K8S
配置本地docker registry
下载registry image并启动registry镜像容器
docker pull registry
docker run --restart=always -d -p 80:5000 -v /mnt/date/registry:/var/lib/registry registry
将阿里云的K8S镜像push到本地仓库
Docker默认采用https,因此需要将本地仓库设置为insecure-registries才可以push到本地仓库。同时因为无法访问gcr.io,需要定向到本地仓库,因此也设置为insecure
echo -e '{\n"insecure-registries":["k8s.gcr.io", "gcr.io", "quay.io","10.128.128.211:80"]\n}' > /etc/docker/daemon.json systemctl restart docker
下载K8S镜像并push到本地
for i in `kubeadm config images list | grep "^k8s" | awk -F "/" '{print $2}'`; do docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$i; docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$i 10.128.128.211:80/$i; docker push 10.128.128.211:80/$i; done
检查是否已经上传至本地
curl 10.128.128.211:80/v2/_catalog
域名访问转发,将对于gcr.io的访问定向到本地仓库
REGISTRY_HOST="10.128.128.211"
yes | cp /etc/hosts /etc/hosts_bak
cat /etc/hosts_bak|grep -vE '(gcr.io|harbor.io|quay.io)' > /etc/hosts
echo """$REGISTRY_HOST gcr.io harbor.io k8s.gcr.io quay.io """ >> /etc/hosts
通过Kubeadm安装K8S
修改hostname
hostnamectl set-hostname master-node
检查镜像配置是否正确
kubeadm config images pull
初始化K8S,这里使用Flannel作为CDI,需要指定参数。最后一次初始化时需要记录相应的token,用于后面添加Slave Node。
kubeadm init --pod-network-cidr=10.244.0.0/16
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf (id -u):$(id -g) $HOME/.kube/config
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
检查K8S安装情况
查看各个组件的安装情况,全都是ready状态才是正常的 kubectl get pods --all-namespaces
trouble shooting
通过kubectl get pods --all-namespaces发行flannel有问题,提示"Init:ImagePullBackOff"
通过kubectl describe pod -n kube-system kube-flannel-ds-amd64-8hknp,发现Failed to pull image "quay.io/coreos/flannel:v0.11.0-amd64",原来是无法下载image。回看上面的操作,在/etc/hosts中添加了quay.io的转发,从/etc/hosts拿掉后,可以下载。ubectl get pods --all-namespaces也显示正常。