kubernetes 实战

kubeadm 安装 kubernetes 集群

2018-09-27  本文已影响0人  RuiWang14

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 的版本不对,修正后就好了。

参考文章

  1. 《kubernetes 权威指南》
  2. https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/
上一篇下一篇

猜你喜欢

热点阅读