K-1 Kubernets踩坑日志安装篇

开始安装K8S集群了,一开始我还打算先创建三个负载均衡的master节点的,不事后来据说最一开始的测试环境只要一个master节点外加两个node节点便可。
html


  • 系统初始化node

首先是三个centos的服务器。而后开始安装组件,这里为了方便三个机器上装的软件,拉的镜像都同样了,实际上能够少安装的一点,不过反正也节约不了多少空间,由于这些软件和镜像不是很大。linux

先是关防火墙和selinux之类的操做确保这些设置不会影响到操做。
git

sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
systemctl stop firewalld
systemctl disable firewalld

swapoff -a
setenforce 0

还有记得把/etc/fstab里的有swap字符的一行给注释掉,不然重启后kubelet的服务会出错。参考命令github

sed -i 's/.*swap.*/#&/' /etc/fstab


  • 安装dockerdocker

接下来就是开始下软件和拉镜像的活了。它们同时存在的问题就是官方源不能下(由于它是某外国知名搜索引擎的服务器)。因此要加一下镜像源。centos

yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum list docker-ce --showduplicates | sort -r
yum -y install docker-ce

systemctl start docker
systemctl status docker
systemctl enable docker


  • 安装kubernetsapi

安装 kubelet、kubeadm、kubectl,注意一下版本,yum源下载的版本默认是最新的,那么容器镜像至少要比这个版本新,若是没有,请在下载的时候注明版本信息。我在作本次测试环境的时候全部的软件和镜像都是1.16.0的版本。bash

加阿里云的镜像源。
服务器

cat>>/etc/yum.repos.d/kubrenetes.repo<<EOF
[kubernetes]
name=Kubernetes Repo
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
EOF
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet && systemctl start kubelet

加上版本的下载方法。

yum install -y kubelet-1.16.0 kubeadm-1.16.0 kubectl-1.16.0

若是你已经下错了,能够用一些命令来解决。

rpm -qa | grep kube 查看版本

yum downgrade <package> //这个是yum降级的命令



先输入命令

kubeadm config images list

它会告诉你,你须要下载哪些镜像,你内心得有个底,至少这些镜像你要先下载完成才能完成继续。

当我在作的时候,屏幕上显示的是

k8s.gcr.io/kube-apiserver:v1.16.7

k8s.gcr.io/kube-controller-manager:v1.16.7

k8s.gcr.io/kube-scheduler:v1.16.7

k8s.gcr.io/kube-proxy:v1.16.7

k8s.gcr.io/pause:3.1

k8s.gcr.io/etcd:3.3.15-0

k8s.gcr.io/coredns:1.6.2

若是你输入了命令,后面的版本可能会有变化,可是前面基本是是一致的。



而后开始用kubeadmin init的方法去初始化集群。不过直接运行网上常见的命令估计90%是失败的。我在踩坑的时候找到两个办法,能够试试。

一个是:

kubeadm init --kubernetes-version=v1.16.0 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap --image-repository=registry.aliyuncs.com/google_containers

这个方法加了一个--image-repository=registry.aliyuncs.com/google_containers参数改变了下载地址。

不过这么作以后,你依旧要把这些docker镜像的仓库名改成k8s.gcr.io。

例如你在用命令docker images看到了镜像的列表。

里面有一个镜像叫作registry.aliyuncs.com/google_containers/kube-apiserver

那么你要用命令docker tag registry.aliyuncs.com/google_containers/kube-apiserver   k8s.gcr.io/kube-apiserver

这样的方法去改。有不少个这样的镜像它们的仓库名都要改。改完以后你能够用docker rmi <images>逐个的把原来registry.aliyuncs.com/google_containers打头的镜像通通删除。固然你留着也没问题。

第二个方法,请参考https://www.cnblogs.com/xingyys/p/11594189.html

用脚本去完成操做

#!/bin/bash## 使用以下脚本下载国内镜像,并修改tag为google的tagset -e

KUBE_VERSION=v1.16.0
KUBE_PAUSE_VERSION=3.1
ETCD_VERSION=3.3.15-0
CORE_DNS_VERSION=1.6.2

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/$imageNamedone
done

而后再运行init命令(如下命令的参数怎么设置呢?第二行的为本机的IP,第三行是容器的版本,第四行则是pod网络,这个尽可能不要改吧。)

sudo kubeadm init \
 --apiserver-advertise-address 192.168.10.20 \
 --kubernetes-version=v1.16.0 \
 --pod-network-cidr=10.244.0.0/16

以下图,而后初始化成功以后,会有一大堆的解释,其中有几条是让你运行的命令,那么就照作吧。

image.png

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

还有一条命令kubeadm join不是在本机上运行的。它看起来像这个样子

kubeadm join 192.168.10.20:6443 --token lixsl8.v1auqmf91ty0xl0k \
    --discovery-token-ca-cert-hash sha256:c3f92a6ed9149ead327342f48a545e7e127a455d5b338129feac85893d918a55

你要记住这个命令,由于里面有惟一的token,这个每一台都是不同的。即便你忘了也不要紧,你能够用

kubeadm token create --print-join-command

从新找到它。

还有就是可能你不是一次就能成功的,若是kubeadm init中途有失败的,你须要用命令

kubeadm reset

来重置master节点。不然会报错,报错一般会说xxx.yaml already exist

image.png

还有关于swap分区引发的问题

image.png

程序会提醒你用如下的命令去查看问题。

systemctl status kubelet
jouralctl -xeu kubelet


在完成这一切以后,你可使用如下命令去查看pod的状态。

kubectl get pods --all-namespaces -o wide

应该相似于这样的一个样子。

image.png

其中coredns这个容器的状态时pending的,还须要装一下网络的组件。


安装flanneld

你已经操做过如下的操做了吧?

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

而后下载quay.io的镜像,同理用脚本去拉镜像,或者本身去镜像网站上拉镜像。这里依旧参考https://www.cnblogs.com/xingyys/p/11594189.html

#!/bin/bash

set -e

FLANNEL_VERSION=v0.11.0

# 在这里修改源
QUAY_URL=quay.io/coreos
QINIU_URL=quay-mirror.qiniu.com/coreos

images=(flannel:${FLANNEL_VERSION}-amd64
flannel:${FLANNEL_VERSION}-arm64
flannel:${FLANNEL_VERSION}-arm
flannel:${FLANNEL_VERSION}-ppc64le
flannel:${FLANNEL_VERSION}-s390x)

for imageName in ${images[@]} ; do
  docker pull $QINIU_URL/$imageName
  docker tag  $QINIU_URL/$imageName $QUAY_URL/$imageName
  docker rmi $QINIU_URL/$imageNamedone
done

而后去网上下载这个文件

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

若是wget不能成功下载,能够在别的地方下载以后放到服务器里去,我就是用迅雷下载的这个文件。

kubectl apply -f kube-flanneld.yaml


node节点的安装

我在配置node节点的时候偷懒了,我用了master相同的的方法把全部的软件和镜像都下载下来了,实际上只要其中的一些,根据前面那个博客上的作法,你能够把在master上已经下载好的镜像打包复制到node节点上。

## master上执行docker save -o pause.tar k8s.gcr.io/pause:3.1
docker save -o kube-proxy.tar k8s.gcr.io/kube-proxy## node上执行docker load -i pause.tar 
docker load -i kube-proxy.tar 

## node上执行docker load -i pause.tar 
docker load -i kube-proxy.tar

flannel网络也得在node上进行一遍。

而后还记得那条kubeadm join的命令吗?就是那个带token的那条,能够输入了。


在完成以上操做后,再回到master节点上,输入命令kubectl get nodes看看相应的node都ready了吗?

相关文章
相关标签/搜索