k8s数客联盟

使用kubeadm部署k8s集群

2017-07-25  本文已影响613人  biggeng

Kubernetes是Google大神开源的容器管理组件,常被称为K8s (PS:K表示第一个字母,s表示最后一个字母,8表示中间一共有8个字母:) ). 被Docker的使用者用于Docker服务的编排和管理。虽然Docker家出了Swarm用来管理Docker,但是目前来看,使用K8s的仍然居多。

K8s的几个概念
K8s集群部署方式

关于K8s的集群部署方式有很多,比如说tar包/rpm下载安装,手动配置。这种方法比较麻烦。自从K8s 1.5版本后,新增了kubeadm init方法,能够快速的安装k8s集群。虽然目前这个方法还是beta版本,并且被警告不要在生产环境中使用 (: ,但是经过笔者的测试,kubeadm init能够方便的部署k8s,期待早日转正 :)

以下是笔者在使用kubeadm init部署过程中整理的方法记录,大部分来源于官方文档: https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/
此外加了一些在过程中遇到的问题和解决方法,以供参考。

准备条件
此处有坑1

如果不设置,在后面执行kubeadm init时,precheck会报错。

sysctl -w net.bridge.bridge-nf-call-iptables="1"
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
        https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
安装kubeadm和kubelet

本次安装选择的是1.6.6版本。

yum install kubelet-1.6.6*
yum install kubeadm-1.6.6*

在安装过程中,会自动的将一些依赖安装,如果某些依赖的源没有在yum中配置,需要加上可以访问的源。

使用 kubeadm init

在k8s的安装文档中,本步骤最简单,只有一行命令,但是在实际操作过程中也是最容易出问题的一步。
登录master节点,执行 kubeadm init,开始初始化master。

此处有坑2

这时候一般会卡到 [apiclient] Created API client, waiting for the control plane to become ready

[kubeadm] WARNING: kubeadm is in beta, please do not use it for production clusters.
[init] Using Kubernetes version: v1.7.0
[init] Using Authorization modes: [Node RBAC]
[preflight] Running pre-flight checks
[preflight] Starting the kubelet service
[certificates] Generated CA certificate and key.
[certificates] Generated API server certificate and key.
[certificates] API Server serving cert is signed for DNS names [kubeadm-master kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] and IPs [10.96.0.1 10.138.0.4]
[certificates] Generated API server kubelet client certificate and key.
[certificates] Generated service account token signing key and public key.
[certificates] Generated front-proxy CA certificate and key.
[certificates] Generated front-proxy client certificate and key.
[certificates] Valid certificates and keys now exist in "/etc/kubernetes/pki"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/admin.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/kubelet.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/controller-manager.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/scheduler.conf"
[apiclient] Created API client, waiting for the control plane to become ready

这个时候就比较抓瞎,没有更多有价值的log输出。这时候可以使用

journalctl -xeu kubelet

打印出log。
如果有如下错误log, 说明kubelet的driver设置的不对。

cgroup driver: "systemd" is different from docker cgroup driver: "cgroupfs"

设置 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf 里的
--cgroup-driver=cgroupfs
保存后,执行systemctl daemon-reload 让配置生效。
再执行kubeadm init,成功完成。

使master节点可以调度pod

默认情况下,master节点不能被调度启动pod,如果需要将master节点加入到调度中,需要执行以下命令:

kubectl taint nodes --all node-role.kubernetes.io/master-
配置pod网络插件

K8s支持以下多种网络插件。在master节点使用 kubectl apply -f 配置网络插件。

pic.png

以Weave net插件为例,可以通过如下命令配置:

kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"

验证是否添加成功可以执行:

kubectl get pods --all-namespaces

如下图,可以看到,weave相关已经成功创建并拉起。


image.png
给集群加入节点

master初始化完成后,可以向此K8s集群增加node节点。一条简单的join命令即可完成。
登录到node节点,执行:

kubeadm join --token <token> <master-ip>:<master-port>

其中token可以在master节点执行 kubeadm token list 查看, 另外默认的master-port一般是6443.

image.png
此处有坑3

根据官方文档,执行完此语句后,在master节点上通过 kubeadm get nodes 就可以查看到已经将node节点加入集群。但是在实际操作中,发现在node节点上执行join语句成功,但是在master节点上看不到新增的node节点。
在node节点上查看kubelet, 发现kubelet没有启动。在node节点上执行 journalctl -xeu kubelet 看到和master节点之前一样的问题,cgroup driver不一致。经过相同的解决方法,成功将node节点拉起后,过几秒钟在master节点上查看,已经能够显示新增的节点了。

部署简单的K8s集群完成。

上一篇下一篇

猜你喜欢

热点阅读