kubeadm 安装 kubernetes 集群
kubeadm 的引入极大的简化了 kubernetes 集群的安装步骤。以下步骤已在腾讯云上进行验证,希望能对大家有所帮助。
环境准备
centos7.2
切换 k8s yum 源
vim /etc/yum.repos.d/kubernetes.repo
# 写入以下内容
[kuberneten]
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
缓存生效:
yum makecache
安装 kubeadm 和相关工具
yum install -y docker kubelet kubeadm kubectl kubernetes-cni
以下是我的安装版本:
安装版本查看安装的版本:
kubectl version
kubectl version
启动 docker 和 kubelet 服务:
systemctl enable docker && systemctl start docker
systemctl enable kubelet && systemctl start kubelet
下载相关镜像
kubeadm 默认下载的镜像都是在 gcr.io 上的,国内的网络环境不能访问,我们可以先下下来,然后自己打tag。
# 查看 kubeadm 会用到的镜像(以 1.11.3 为例)
kubeadm config images list
kubeadm config images list
使用如下命令拉取镜像,并打tag。
docker pull docker.io/mirrorgooglecontainers/kube-apiserver-amd64:v1.11.3
docker tag docker.io/mirrorgooglecontainers/kube-apiserver-amd64:v1.11.3 k8s.gcr.io/kube-apiserver-amd64:v1.11.3
docker pull docker.io/mirrorgooglecontainers/kube-controller-manager-amd64:v1.11.3
docker tag docker.io/mirrorgooglecontainers/kube-controller-manager-amd64:v1.11.3 k8s.gcr.io/kube-controller-manager-amd64:v1.11.3
docker pull docker.io/mirrorgooglecontainers/kube-scheduler-amd64:v1.11.3
docker tag docker.io/mirrorgooglecontainers/kube-scheduler-amd64:v1.11.3 k8s.gcr.io/kube-scheduler-amd64:v1.11.3
docker pull docker.io/mirrorgooglecontainers/kube-proxy-amd64:v1.11.3
docker tag docker.io/mirrorgooglecontainers/kube-proxy-amd64:v1.11.3 k8s.gcr.io/kube-proxy-amd64:v1.11.3
docker pull docker.io/mirrorgooglecontainers/pause-amd64:3.1
docker tag docker.io/mirrorgooglecontainers/pause-amd64:3.1 k8s.gcr.io/pause:3.1
docker pull docker.io/mirrorgooglecontainers/etcd-amd64:3.2.18
docker tag docker.io/mirrorgooglecontainers/etcd-amd64:3.2.18 k8s.gcr.io/etcd-amd64:3.2.18
docker pull docker.io/coredns/coredns:1.1.3
docker tag docker.io/coredns/coredns:1.1.3 k8s.gcr.io/coredns:1.1.3
初始化
kubeadm init --kubernetes-version=1.11.3 --pod-network-cidr=10.244.0.0/16
看到如下信息,表明已经安装成功。
kubeadm init执行下面的命令进行配置:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
安装网络插件
执行 kubectl get node 命令,发现 master 节点的状态为 NotReady。我们需要安装 cni 网络插件。
# 请注意 flannel 的版本问题
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/c5d10c8/Documentation/kube-flannel.yml
其他的网络插件安装方法可以参见 k8s 官网 或者 这篇文章
安装 Node,加入集群
新节点的环境安装,可以参见本文的 安装 kubeadm 和相关工具 一节。
在节点上执行,以加入集群:
# 注意把 YOURIP、YOURTOKEN、YOURHASH 替换成自己的
# 具体命令可以参见 kubeadm init 之后最后一行的输出
kubeadm join YOURIP --token YOURTOKEN --discovery-token-ca-cert-hash YOURHASH
Master 节点默认不参与工作负载,可以执行下面的命令来搭建一个 all-in-one 的 kubernetes 环境。
kubectl taint nodes --all node-role.kubernetes.io/master-
执行 kubectl get nodes 可以查看节点状态。
可能遇到的问题
1. hostname
在执行 kubeadm config images list 或者 kubeadm init 的时候可能会遇见下面的错误:
name: Invalid value: "vm_0_8_centos": a DNS-1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character (e.g. 'example.com', regex used for validation is '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*')
原因是 hostname 和 DNS 的解析规则不匹配,改掉自己的hostname就好了。
2. kubeadm init
在 执行 kubeadm init 的时候可能会遇到下面的问题:
No internet connection is available so the kubelet cannot pull or find the following control plane images:
原因是不能从 k8s.gcr.io 上拉取到镜像,可以参见前面拉取镜像的命令。
如果本地已经有需要的镜像,并且已经打好正确的 tag,仍然出现上面的问题。一个可能的原因是:在宿主机上开启了代理(ss 等),关掉就好了。
3. kube-flannel
可能会出现 kube-flannel CrashLoopBackOff 的错误,笔者遇到的情况是 flannel 的版本不对,修正后就好了。
参考文章
- 《kubernetes 权威指南》
- https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/