一步步打造专属于自己的Kubernetes-1.8.4集群环境

一 kubernetes

kubernetes

以下介绍摘自Wiki
Kubernetes (通常称为K8s) 是用于自动部署、扩展和管理容器化(containerized)应用程序的开源系统。Google设计并捐赠给Cloud Native Computing Foundation(今属Linux基金会)来使用的。它旨在提供“跨主机集群的自动部署、扩展以及运行应用程序容器的平台”。它支持一系列容器工具, 包括Docker等。

本文主要介绍如何使用kubeadm快速搭建K8s集群环境,让你迅速体验学习Kubernetes。

更多内容查阅官网K8s.io


二 实验环境

硬件

宿主机:Win10 + Virtualbox
虚拟机:2核4g + 桥接网卡

主机名 系统 IP
master.k8s CentOS 7.4 x86_64 192.168.1.100
node1.k8s CentOS 7.4 x86_64 192.168.1.101
node2.k8s CentOS 7.4 x86_64 192.168.1.102

软件

软件包 版本
kubeadm v1.8.4
kubelet v1.8.4
kubectl v1.8.4
kubernetes-cni 0.5.1
docker 1.12.6

上述安装包已经上传百度云,下载链接: https://pan.baidu.com/s/1c2NJADy 密码: dfgq

镜像

Kubeadm初始化中会从gcr.io中下载很多镜像。如果是在国内(无奈的FUC~K),只得另辟蹊径,自找出路。我是将镜像同步到了Docker Hub,然后从docker hub 下载,再tag回来。

镜像名称 仓库 备注
kube-proxy-amd64:v1.8.4 gcr.io/google_containers/ FQ
kube-scheduler-amd64:v1.8.4 gcr.io/google_containers/ FQ
kube-controller-manager-amd64:v1.8.4 gcr.io/google_containers/ FQ
kube-apiserver-amd64:v1.8.4 gcr.io/google_containers/ FQ
etcd-amd64:3.0.17 gcr.io/google_containers/ FQ
k8s-dns-sidecar-amd64:1.14.5 gcr.io/google_containers/ FQ
pause-amd64:3.0 gcr.io/google_containers/ FQ
k8s-dns-kube-dns-amd64:1.14.5 gcr.io/google_containers/ FQ
k8s-dns-dnsmasq-nanny-amd64:1.14.5 gcr.io/google_containers/ FQ
flannel:v0.9.1-amd64 quay.io/coreos 正常访问

三 all节点

下列操作在所有节点以root用户执行。

3.1 更新系统

yum makecache fast
yum -y update

3.2 停用SWAP分区

临时停止,重启无效:
# swapoff -a

永久关闭:

1. 删除SWAP分区
2. 修改/etc/default/grub,找到GRUB_CMDLINE_LINUX并删除swap
3. 备份/etc/grub2.cfg
4. 重新生成/etc/grub2.cfg

3.3 关闭SELinux

临时停止,重启无效:
# setenforce 0

永久关闭:
修改/etc/selinux/config,然后重启系统。

3.4 设置内核参数

cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system

3.5 安装kubeadm等包

将下载好的包上传至系统目录,这里是/opt/soft/

执行安装命令:yum localinstall -y /opt/soft/*.rpm

3.6 开启firewalld

systemctl restart firewalld
systemctl enable firewalld

3.7 加速docker pull

由于大部分源都在国外,国内下载体验很不好,所以需要设置docker加速器。

常用的有:

  1. Daocloud 加速
  2. aliyun 加速

这里使用Daocloud

3.8 调整kubelet启动参数

这一步很关键,在没有调整kubelet启动参数之前,我初始化K8s cluster后,在 /var/log/message 中频繁出现以下错误信息:

Nov 28 09:29:03 k8s kubelet: E1128 09:29:03.679613    6485 summary.go:92] Failed to get system container stats for "/system.slice/kubelet.service": failed to get cgroup stats for "/system.slice/kubelet.service": failed to get container info for "/system.slice/kubelet.service": unknown container "/system.slice/kubelet.service"
Nov 28 09:29:03 k8s kubelet: E1128 09:29:03.679651    6485 summary.go:92] Failed to get system container stats for "/system.slice/docker.service": failed to get cgroup stats for "/system.slice/docker.service": failed to get container info for "/system.slice/docker.service": unknown container "/system.slice/docker.service"
Nov 28 09:29:03 k8s kubelet: W1128 09:29:03.679695    6485 helpers.go:847] eviction manager: no observation found for eviction signal allocatableNodeFs.available

后来在 stackoverflow 上找到了同问题的解决办法,就是调整启动参数:

编辑配置文件 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

新增: Environment="KUBELET_MY_ARGS=--runtime-cgroups=/systemd/system.slice --kubelet-cgroups=/systemd/system.slice"

修改ExecStart: 在末尾新增 $KUBELET_MY_ARGS

问题地址: https://stackoverflow.com/questions/46726216/kubelet-fails-to-get-cgroup-stats-for-docker-and-kubelet-services

3.9 下载镜像

从docker hub中下载所需镜像,并重新tag

images=(kube-proxy-amd64:v1.8.4 kube-scheduler-amd64:v1.8.4 kube-controller-manager-amd64:v1.8.4 kube-apiserver-amd64:v1.8.4 etcd-amd64:3.0.17 k8s-dns-sidecar-amd64:1.14.5 pause-amd64:3.0 k8s-dns-kube-dns-amd64:1.14.5 k8s-dns-dnsmasq-nanny-amd64:1.14.5) 

for imageName in ${images[@]} ; do
  docker pull yotoobo/$imageName
  docker tag  yotoobo/$imageName gcr.io/google_containers/$imageName
  docker rmi  yotoobo/$imageName
done

3.10 修改/etc/hosts

由于没有内网dns服务,所以这里使用hosts文件。

添加以下内容到/etc/hosts

192.168.1.100 master.k8s
192.168.1.101 node1.k8s
192.168.1.102 node2.k8s

四 master节点

下列操作在master节点以root用户执行。

4.1 允许指定端口访问

firewall-cmd --permanent --add-port=6443/tcp
firewall-cmd --permanent --add-port=2379-2380/tcp
firewall-cmd --permanent --add-port=10250/tcp
firewall-cmd --permanent --add-port=10251/tcp
firewall-cmd --permanent --add-port=10252/tcp
firewall-cmd --permanent --add-port=10255/tcp
firewall-cmd --reload

端口作用:

端口 目的
6443 kube-apiserver
2379-2380 etcd server client API
10250 kubelet api
10251 kube-scheduler
10252 kube-controller-manager
10255 Read-only Kubelet API

4.2 启动服务

systemctl enable kubelet && systemctl restart kubelet
systemctl enable docker && systemctl restart docker

4.3 kubeadm 初始化

kubeadm init --kubernetes-version=v1.8.4 --token-ttl 0 --pod-network-cidr=10.244.0.0/16

--kubernetes-version=v1.8.4 :不指定会去google获取版本信息,所以你懂的~~~
--token-ttl 0 :token永不过期,不指定默认24h后过期
--pod-network-cidr=10.244.0.0/16 :如果要正常使用Flannel,则确保使用此配置

接着等待初始化完成

kubeadm-init

如果看到提示1,则说明初始化成功,恭喜,你已经成功了90%了。

按照提示2执行对应操作。

提示3则非常重要了,要妥善保存好,以后添加node机到K8s集群就需要它了。

4.4 安装Flannel

K8s有许多可选的Pod Network,这里选择Coreos的Flannel

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.9.1/Documentation/kube-flannel.yml

4.5 查看master状态

get-info

五 nodes节点

下列操作在nodes节点以root用户执行。

5.1 允许指定端口

firewall-cmd --permanent --add-port=10250/tcp
firewall-cmd --permanent --add-port=10255/tcp
firewall-cmd --permanent --add-port=30000-32767/tcp
firewall-cmd --reload

30000-32767为NodeService的默认端口

5.2 启动服务

systemctl enable kubelet && systemctl restart kubelet
systemctl enable docker && systemctl restart docker

5.3 kubeadm join

使用步骤4.3中的提示3,将nodes节点添加到K8s集群中。

kubeadm-join

最后

至此,我们借助Kubeadm搭建了一套3节点的集群环境,不过需要指出的是Kubeadm还是一个beta版工具,还不建议在生产环境中使用。因为master节点、etcd、kube-apiserver等都还属于单节点。

现在,回到master机器上,再来验证下K8s环境:

get-info2

在创建一个简单的Pod:

cat >> /opt/k8s/myapp-pod.yml << EOF
apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
spec:
  containers:
  - name: myapp-container
    image: busybox
    command: ['sh', '-c', 'echo Hello Kubernetes! && sleep 3600']
EOF

kubectl apply -f /opt/k8s/myapp-pod.yml

验证:

pod-info

K8s还有许许多多的特性和功能,在深入学习中你会发现K8s是如此的强大而富有魅力。

奔跑的K8s!!!

同时此文章也发布在了我的个人博客,希望大家可以多多光顾。

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

推荐阅读更多精彩内容