为了账号安全,请及时绑定邮箱和手机立即绑定

利用 kubeadm 安装 kubernetes 集群

标签:
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_64enabled=1gpgcheck=0repo_gpgcheck=0gpgkey=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

以下是我的安装版本:

webp

安装版本

查看安装的版本:

kubectl version

webp

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

webp

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

看到如下信息,表明已经安装成功。

webp

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



作者:RuiWang14
链接:https://www.jianshu.com/p/f9a54e553ce4


点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消