使用kubeadm部署k8s集群

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

K8s的几个概念
  • Pod
    K8s部署调度的最小单元,运行在node节点上。运行在同一个Pod内的多个容器共享相同的网络命名空间、IP地址和端口。
  • RC (Replication Controller)
    RC用来保证Pod按照一定的备份数运行。
  • Service
    Service定义了Pod的逻辑集合和访问策略...
  • Node
    Node是k8s集群中Pod运行的节点。
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"
  • 配置k8s yum源,如果能够连外网使用google的源,否则的话可以找找国内的代理源或者自行下载kubeadm和kubelet的安装包手动安装。
    google的yum源如下:
[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集群完成。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容