投石问路

环境

  • centos 7 amd64 两台
  • kubernetes 1.10

伴随着k8s壹.十版本的昭示,前几天先在一台机械上搭建了k八s单机版集群,即既是master,也是node,根据经验,将
kubeadm init 提示的 kubeadm join
记录下来,方便未来新添集群集工作节点(机器)时,能够直接复用,紧接着就布局dashboard、heapster、ElasticSearch、Redis、dotnet
微服务等等,一鼓作气,集群状态特出,因为前面测试环境搞过k8s,呵呵 ……
。过了二日公司购买的第壹胎服务器到了,那么就顺其自然的在上边施行从前记录的
kubeadm join 脚本,结果如下:

澳门金沙国际 1
看来那几个提醒音信,笔者一心百分之百地相信,node
已经进入集群,并且只要等说话,通过 kubectl get nodes 就足以看出
node is ready,嘿嘿
过一会儿,又过1会,再过一会儿 …… ,不过
澳门金沙国际 2

Kubernetes是谷歌(Google)大神开源的器皿管理组件,常被誉为K8s
(PS:K表示第一个假名,s表示最后二个假名,八代表中间1共有几个字母:) ).
被Docker的使用者用于Docker服务的编排和治本。就算Docker家出了Swarm用来保管Docker,不过当前来看,使用K8s的依旧居多。

kubeadm是Kubernetes官方提供的火速安装和初叶化Kubernetes集群的工具,近期的还处于孵化开荒景况,伴随Kubernetes每一种版本的发布都会联合立异。
当然,目前的kubeadm是无法用于生产环境的。
但伴随着Kubernetes每一趟版本晋级,kubeadm都会对集群配置方面包车型客车有的施行做调控,通超过实际验kubeadm大家得以学习到Kubernetes官方在集群配置上部分新的特等施行。

使用Kubeadm部署k8s集群

三步装集群:离线包地址

上天取经,历经九九八十壹难

然后,开启重试方式,发扬程序员不掘不挠的观念意识精神:

  1. kubectl reset
  2. kubectl join ......
  3. kubectl get nodes

进入重试死循环N次,耐性真好,哈哈。明明提醒
This node has joined the cluster
,为何实情是如此吧,难道那正是有口皆碑和现实性的歧异,其实那便是
,out了吗。笔者想了又想,看了又看,未有一丢丢似是而非、警告之类的音讯,无从动手啊,怎么做呢,最终依旧把关心点放在了kubelet(什么人叫您是
node agent,确定拿你开刀啊,呵呵)上,于是初步查阅kuberlet的日记:

澳门金沙国际 3

见状了啊

error: failed to run Kubelet: failed to create kubelet:
misconfiguration: kubelet cgroup driver: “cgroupfs” is different from
docker cgroup driver: “systemd”
原本这些小标题啊,哎。。。。。。,小编又再二遍相信了这几个k8s的提醒消息,然后先河考订bug了

澳门金沙国际 4

澳门金沙国际 5

信了您的邪哦,为什么 kubelet cgroup driverdocker cgroup driver【澳门金沙国际】离线安装。
一模同样,刚刚,kubelet
日志里面不是。。。明明。。。却。。。,淡定,那也许是幻觉,好啊。到底哪些是确实,什么是假的,能还是不能够给2个纯粹的提醒音信,既然也不是kubelet的主题素材,又是风靡的版本,也未尝资料可查,当下事实上心有余而力不足了,那就去
kubernets#62776
Issues啊,于是乎,就那样下班了。。。。

澳门金沙国际 6

第3天,第三件业务正是翻开明天提的难题是否有人回答了,结果来看被五个孔雀之国阿三给关闭了

澳门金沙国际 7

嘿,和明日预期的结果一眼,好像某个诸葛了啊,嘿嘿,那依然靠本身呢,又想了又想,看了又看,真的是未曾一小点防护啊,时期检查了
kubeadmkubectlkubelet,也查看来了各个配置;也想过是或不是master提前安装的1对事物影响了,因为在此以前都以
kubeadm init 后,然后就顿时·kubeadm join;还想过是或不是条件的难点,因为在此以前的测试环境向来是Ubuntu 16.4,以后的主机环境是
CentOS 7。本想着今日上午,搞不定,就遵照测试环境的步子,重来来过,然后,照旧不肯甩掉(天生就是当程序员的料子啊,就是头有点冷,呵呵),于是从其余的角度去观念,思疑是还是不是记录的
‘kube join token=…. ‘,有标题啊(此前为啥没可疑,是因为自己是直接复制
kubeadm init
打字与印刷出来的原生脚本,而且测试环境一点主题素材都并未有。),于是从头顺藤摸瓜,排查第三个参数
token,实践命令 kubeadm token list

澳门金沙国际 8

K捌s的多少个概念
  • Pod
    K八s安插调度的微乎其单反相机元,运维在node节点上。运营在同二个Pod内的四个容器共享同样的网络命名空间、IP地址和端口。
  • RC (Replication Controller)
    CR-VC用来确定保障Pod依照一定的备份数运营。
  • Service
    Service定义了Pod的逻辑集合和访问战术…
  • Node
    Node是k八s集群中Pod运维的节点。

Kubernetes
1.8早就发表,为了跟上合法更新的剧本,接下去感受一下Kubernetes
壹.8中的kubeadm。

基本功条件

关闭swap

swapoff -a
再把/etc/fstab文件中富含swap的行删了,未有就无所谓

装那两工具假诺没装的话

yum install -y ebtables socat

IPv四 iptables 链设置 CNI插件要求

sysctl net.bridge.bridge-nf-call-iptables=1

修成正果,立地成佛

当成抛开云雾见天明,不轻易啊,众里寻她千百度,原来他在灯火阑珊处。。。。。哎,不去搞文艺,可惜了,呵呵。
于是乎,通过 kubeadm create token 重新创立了2个
token,然后,重新实行 kubeadm join,再次翻开 kubectl get nodes

澳门金沙国际 9

马到功成了,终于不负众望了,那是搞 kubernetes
以来,踩的最迷糊的一次坑,最终自身答应了友好的
kubernets#62776
,顺便也给kubernetes
提了1晃建议,希望提示音信能够精确些,他们的一小步,就是大家的第一次全国代表大会步啊。。。。。

澳门金沙国际 10

K八s集群安排方式

关于K八s的集群布署格局有那多少个,比如说tar包/rpm下载安装,手动配置。这种情势相比麻烦。自从K八s
壹.伍本子后,新扩充了kubeadm
init方法,可以非常的慢的设置k八s集群。就算目前以此点子依然beta版本,并且被警告不要在生养条件中央银行使
(: ,不过通过作者的测试,kubeadm init能够有利于的布局k八s,期待早日转正 🙂

以下是笔者在行使kubeadm
init计划进度中整理的秘籍记录,半数以上来自官方文书档案:
https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/
其它加了1些在经过中相见的难点和平解决决方法,以供参考。

1.准备

墙外设置

在境内是很难使用那种方法安装了,推荐查看离线安装的方案

装docker

yum install -y docker
systemctl enable docker && systemctl start docker

装kubeadm kubectl kubelet

 

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[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
EOF
setenforce 0
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet && systemctl start kubelet

关闭SElinux

setenforce 0

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

下一场与离线安装运行master一点差距也未有, kubeadm init

普惠

默许境况下,通过 kubeadm create token 创建的 token
,过期日子是二四钟头,那就是怎么过了一天不可能再一次利用以前记录的
kube join 原生脚本的原因,也得以运作
kubeadm token create --ttl 0调换一个毫然则期的
token,详细的情况请参考:kubeadm-token,驾驭了原由才具够触类旁通,带着理念学习k捌s,才不会感到乏味,希望把那个分享给大家,更期望把全体考虑进程分享给大家,往往结果很简短,进度确仿佛西天取经,只假诺程序员,都有同感吗。假诺有怎么着难点,可能想要沟通的东西欢迎评论区留言,楼主会一三回复的啊。

忧盛危明条件
  • 安装Docker, 参照
    https://docs.docker.com/engine/installation/linux/docker-ce/centos/\#install-from-a-package
  • 打开net.bridge.bridge-nf-call-iptables

1.1连串布局

离线安装

便宜,作者早已把具备重视的镜像,贰进制文件,配置文件都打成了包,消除你抱有正视,花了众多时间整治那一个,放在了Ali云市镇上,希望咱们给点小帮忙
离线包地址赏笔者1杯咖啡

这包里面把大多数操作都写在简约的台本里面了,在master节点实施init-master.sh 在node节点实行init-node.sh
安装dashboard实施init-dashboard.sh。

下一场就能够在node节点试行master输出出来的join命令了。包的最大价值在于未有别的借助了,再也不用拜访不了国外某网而胸闷了。

如若你感到本篇作品对您有扶持的话,多谢您的【推荐】,那将成为自作者继续写作的引力

此间有坑壹

假定不设置,在前边实行kubeadm init时,precheck会报错。

sysctl -w net.bridge.bridge-nf-call-iptables="1"
  • 布局k八s
    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

在装置从前,必要先做如下准备。两台CentOS 七.三主机如下:

安装kubelet服务,和kubeadm

下载bin文件
地址

把下载好的kubelet kubectl kubeadm 直接拷贝到/usr/bin上边

配置kubelet systemd服务

 

cat <<EOF > /etc/systemd/system/kubelet.service
[Unit]
Description=kubelet: The Kubernetes Node Agent
Documentation=http://kubernetes.io/docs/

[Service]
ExecStart=/usr/bin/kubelet
Restart=always
StartLimitInterval=0
RestartSec=10

[Install]
WantedBy=multi-user.target
EOF

 

cat <<EOF > /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"
Environment="KUBELET_SYSTEM_PODS_ARGS=--pod-manifest-path=/etc/kubernetes/manifests --allow-privileged=true"
Environment="KUBELET_NETWORK_ARGS=--network-plugin=cni --cni-conf-dir=/etc/cni/net.d --cni-bin-dir=/opt/cni/bin"
Environment="KUBELET_DNS_ARGS=--cluster-dns=10.96.0.10 --cluster-domain=cluster.local"
Environment="KUBELET_AUTHZ_ARGS=--authorization-mode=Webhook --client-ca-file=/etc/kubernetes/pki/ca.crt"
Environment="KUBELET_CADVISOR_ARGS=--cadvisor-port=0"
Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=cgroupfs"
Environment="KUBELET_CERTIFICATE_ARGS=--rotate-certificates=true --cert-dir=/var/lib/kubelet/pki"
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_SYSTEM_PODS_ARGS $KUBELET_NETWORK_ARGS $KUBELET_DNS_ARGS $KUBELET_AUTHZ_ARGS $KUBELET_CADVISOR_ARGS $KUBELET_CGROUP_ARGS $KUBELET_CERTIFICATE_ARGS $KUBELET_EXTRA_ARGS
EOF

此地需求主意的是要看一下docker的cgroup driver与 –cgroup-driver要壹律。
能够用 docker info |grep Cgroup 查看,有十分的大可能率是systemd 大概 cgroupfs

日增主机名解析

为了防御不或许解析主机名,修改/etc/hosts把主机名与ip的照耀写上

假使您对 kubernets 和 dotnet 感兴趣的话能够关切本人,作者会定时的在博客分享本人的学习心得

安装kubeadm和kubelet

此番安装选用的是一.陆.六本子。

yum install kubelet-1.6.6*

yum install kubeadm-1.6.6*

在装置进程中,会活动的将一部分凭借安装,如若有个别信赖的源未有在yum中安插,须要丰硕能够访问的源。

cat/etc/hosts192.168.61.11node1192.168.61.12node2

启动master节点

此地得把google的一票镜像想办法弄下来,但是作者壹度打成了二个tar包

 

kubeadm init --pod-network-cidr=192.168.0.0/16 --kubernetes-version v1.8.0 --skip-preflight-checks
  • –pod-network-cidr 参数安装calico互联网时需求
  • –kubernetes-version 不加的话会去乞求公网查询版本讯息
  • –skip-preflight-checks 消除3个kubelet目录不空的小bug

总的来看这几个输出时您便成功了:

 

To start using your cluster, you need to run (as a regular user):

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  http://kubernetes.io/docs/admin/addons/

You can now join any number of machines by running the following on each node
as root:

  kubeadm join --token <token> <master-ip>:<master-port> --discovery-token-ca-cert-hash sha256:<hash>

照着试行:

 

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config
使用 kubeadm init

在k八s的安装文书档案中,本步骤最简便,只有一行命令,但是在实操进程中也是最轻便出难点的一步。
登录master节点,执行 kubeadm init,起首开始化master。

假使每一种主机启用了防火墙,须求开放Kubernetes各类零部件所急需的端口,能够查阅Installing
kubeadm中的”Check
required ports”壹节。 那里大约起见在各节点禁止使用防火墙:

安装calico网络

 

kubectl apply -f https://docs.projectcalico.org/v2.6/getting-started/kubernetes/installation/hosted/kubeadm/1.6/calico.yaml
那里有坑二

此时一般会卡到 [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,成功做到。

systemctl stop firewalld

join node节点

一样到node节点安装kubelet和kubeadm,和master节点操作同样,不再赘言。
然后实行master节点init输出的不胜命令:

 

  kubeadm join --token <token> <master-ip>:<master-port> --discovery-token-ca-cert-hash sha256:<hash>

进行到位后在master节点用kubectl验证节点是或不是平常

 

[root@dev-86-202 ~]# kubectl get nodes
NAME         STATUS     ROLES     AGE       VERSION
dev-86-202   NotReady   master    17h       v1.8.1

在意,master节点暗中认可是不作为node的,也不引入做node节点。
假若需求把master当node:

 

[root@dev-86-202 ~]# kubectl taint nodes --all node-role.kubernetes.io/master-
使master节点能够调度pod

默许境况下,master节点无法被调度运行pod,假设急需将master节点参预到调度中,供给实践以下命令:

kubectl taint nodes --all node-role.kubernetes.io/master-

systemctl disable firewalld

安装dashboard

设置dashboard轻巧,使用时还真有点绕,首借使RBAC, 先介绍个轻易的

 

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/alternative/kubernetes-dashboard.yaml

设置完事后, 使用nodeport情势访问

 

kubectl -n kube-system edit service kubernetes-dashboard

把type: ClusterIP 改成 type: NodePort 然后保存

 

$ kubectl -n kube-system get service kubernetes-dashboard
NAME                   CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
kubernetes-dashboard   10.100.124.90   <nodes>       443:31707/TCP   21h

https://masterip:3170七 就可以访问dashboard了, 可是。。 还不可能用。

创造叁个 dashboard-admin.yaml

 

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: kubernetes-dashboard
  labels:
    k8s-app: kubernetes-dashboard
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: kubernetes-dashboard
  namespace: kube-system

kubectl create -f dashboard-admin.yaml

接下来在分界面上直接点skip就足以了,然而你懂的,那很不安全。 真正安全的做法
请关怀自身更是研商:

配置pod互连网插件

K八s支持以下多样网络插件。在master节点使用 kubectl apply -f
配置网络插件。

澳门金沙国际 11

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相关已经成功创办并拉起。

澳门金沙国际 12

image.png

创立/etc/sysctl.d/k8s.conf文件,加多如下内容:

科学普及难点

kubelet服务运维不了?

cgroup driver配置要平等

查看docker cgroup driver:

 

docker info|grep Cgroup

有systemd和cgroupfs二种,把kubelet service配置改成与docker一致

vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

KUBELET_CGROUP_ARGS=–cgroup-driver=cgroupfs
#本条布局与docker改成壹致

节点not ready ?

提议安装calico互连网,假诺要把主节点当成node节点要求加个命令:

 

[root@dev-86-202 ~]# kubectl taint nodes --all node-role.kubernetes.io/master-

dashboard 访问不了?

万1是NodePort方式访问,那需求精通dashboard服务实际调度到哪个节点上去了。访问非凡节点的ip而不是master的ip。
相当的话把https 改成http试试。

翻开具体在哪些节点

 

kubectl get pod -n kube-system -o wide

拉取镜像失利?

能够把node节点与master节点的镜像都在每一个节点load一下。

dashboard crash, dns起不来?

能够把node节点与master节点的镜像都在每一个节点load一下。

1九二.168网段与calico网段冲突?

假定您刚好也是1九二.16八网段,那么提议修改一下calico的网段

这样init

 

kubeadm init --pod-network-cidr=192.168.122.0/24 --kubernetes-version v1.8.1

修改calico.yaml

 

    - name: FELIX_DEFAULTENDPOINTTOHOSTACTION
      value: "ACCEPT"
    # Configure the IP Pool from which Pod IPs will be chosen.
    - name: CALICO_IPV4POOL_CIDR
      value: "192.168.122.0/24"
    - name: CALICO_IPV4POOL_IPIP
      value: "always"
    # Disable IPv6 on Kubernetes.
    - name: FELIX_IPV6SUPPORT
      value: "false"

本文恒久更新链接地址:http://www.linuxidc.com/Linux/2017-10/148026.htm

澳门金沙国际 13

给集群到场节点

master开首化达成后,能够向此K八s集群扩张node节点。一条简单的join命令就能够到位。
登录到node节点,执行:

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

中间token能够在master节点实践 kubeadm token list 查看,
别的暗许的master-port一般是6443.

澳门金沙国际 14

image.png

net.bridge.bridge-nf-call-ip6tables=1net.bridge.bridge-nf-call-iptables=1

那边有坑三

依照官方文书档案,实施完此语句后,在master节点上经过 kubeadm get nodes
就足以查看到曾经将node节点到场集群。但是在实操中,发将来node节点上推行join语句成功,不过在master节点上看不到新扩展的node节点。
在node节点上查看kubelet, 发现kubelet未有运转。在node节点上施行
journalctl -xeu kubelet 看到和master节点以前同1的标题,cgroup
driver不1致。经过同样的消除格局,成功将node节点拉起后,过几分钟在master节点上查看,已经可以展现新添的节点了。

配备简单的K八s集群完毕。

进行sysctl -p /etc/sysctl.d/k八s.conf使修改生效。

禁用SELINUX:

setenforce0

vi/etc/selinux/config

SELINUX=disabled

Kubernetes
一.8上马须要关闭系统的Swap,假如不闭馆,暗中认可配置下kubelet将不能起动。可以通过kubelet的开发银行参数–fail-swap-on=false改造这些范围。
大家那边境海关闭系统的Swap:

swapoff-a

修改 /etc/fstab 文件,注释掉 SWAP 的自行挂载,使用free
-m确认swap已经停业。

swappiness参数调节,修改/etc/sysctl.d/k8s.conf加多底下壹行:

vm.swappiness=0

施行sysctl -p /etc/sysctl.d/k八s.conf使修改生效。

1.2安装Docker

yum install-y yum-utils device-mapper-persistent-data lvm2

yum-config-manager \–add-repo \

查看当前的Docker版本:

yum list docker-ce.x86_64–showduplicates|sort-r

docker-ce.x86_6417.09.0.ce-1.el7.centosdocker-ce-stable

docker-ce.x86_6417.06.2.ce-1.el7.centosdocker-ce-stable

docker-ce.x86_6417.06.1.ce-1.el7.centosdocker-ce-stable

docker-ce.x86_6417.06.0.ce-1.el7.centosdocker-ce-stable

docker-ce.x86_6417.03.2.ce-1.el7.centosdocker-ce-stable

docker-ce.x86_6417.03.1.ce-1.el7.centosdocker-ce-stable

docker-ce.x86_6417.03.0.ce-1.el7.centosdocker-ce-stable

Kubernetes 一.8早就指向Docker的一.1一.2, 一.1二.陆,
1.一3.一和一七.0三.2等版本做了印证。
因为大家那里在各节点安装docker的一七.0三.二本子。

yum makecache fast

yum install-y–setopt=obsoletes=0\

docker-ce-17.03.2.ce-1.el7.centos\

docker-ce-selinux-17.03.2.ce-1.el7.centossystemctl start docker

systemctl enable docker

Docker从1.1叁本子开头调控了暗中同意的防火墙规则,禁止使用了iptables
filter表中FOWA路虎极光D链,那样会引起Kubernetes集群中跨Node的Pod不或许通信,在每一种Docker节点实施下边的授命:

iptables-P FORWARD ACCEPT

可在docker的systemd unit文件中以ExecStartPost到场地方的指令:

ExecStartPost=/usr/sbin/iptables-P FORWARD ACCEPT

systemctl daemon-reload

systemctl restart docker

2.安装kubeadm和kubelet

下边在各节点安装kubeadm和kubelet:

cat</etc/yum.repos.d/kubernetes.repo[kubernetes]name=Kubernetesbaseurl=

测试地方

curl

yum makecache fast

yum install-y kubelet kubeadm
kubectl…Installed:kubeadm.x86_640:1.8.0-0kubectl.x86_640:1.8.0-0kubelet.x86_640:1.8.0-0DependencyInstalled:kubernetes-cni.x86_640:0.5.1-0socat.x86_640:1.7.3.2-2.el7

从安装结果可以见到还设置了kubernetes-cni和socat几个依靠:

能够看来官方Kubernetes 1.八注重的cni照旧0.5.一本子

socat是kubelet的依赖

咱俩前边在Kubernetes 1.6高可用集群安顿中手动安装那五个依靠的

Kubernetes文档中kubelet的启航参数:

–cgroup-driverstringDriverthat the kubelet uses to manipulate cgroups
on the host.Possiblevalues:’cgroupfs’,’systemd'(default”cgroupfs”)

暗中同意值为cgroupfs,然则大家注意到yum安装kubelet,kubeadm时生成十-kubeadm.conf文件准将以此参数值改成了systemd。

查阅kubelet的
/etc/systemd/system/kubelet.service.d/十-kubeadm.conf文件,当中饱含如下内容:

Environment=”KUBELET_CGROUP_ARGS=–cgroup-driver=systemd”

使用docker info打印docker信息:

docker info……ServerVersion:17.03.2-ce……CgroupDriver:cgroupfs

能够看出docker 一七.03使用的Cgroup Driver为cgroupfs。

于是乎修改各节点docker的cgroup
driver使其和kubelet壹致,即修改或创办/etc/docker/daemon.json,到场下边包车型客车始末:

{“exec-opts”:[“native.cgroupdriver=systemd”]}

重启docker:

systemctl restart docker

systemctl status docker

在各节点开机运营kubelet服务:

systemctl enable kubelet.service

三.使用kubeadm init初阶化集群

接下去使用kubeadm开始化集群,选拔node1作为Master
Node,在node1上进行上边包车型大巴指令:

kubeadm init
\–kubernetes-version=v1.8.0\–pod-network-cidr=10.244.0.0/16\–apiserver-advertise-address=192.168.61.11

因为我们接纳flannel作为Pod互连网插件,所以地方的一声令下钦定–pod-network-cidr=10.24四.0.0/1陆。

kubeadm init
\澳门金沙国际 ,>–kubernetes-version=v1.8.0\>–pod-network-cidr=10.244.0.0/16\>–apiserver-advertise-address=192.168.61.11[kubeadm]WARNING:kubeadmisinbeta,pleasedonotuseitforproduction
clusters.[init]UsingKubernetesversion:v1.8.0[init]UsingAuthorizationmodes:[NodeRBAC][preflight]Runningpre-flight
checks[preflight]WARNING:firewalldisactive,pleaseensureports[644310250]are
openoryour cluster maynotfunctioncorrectly[preflight]Startingthe
kubelet service[kubeadm]WARNING:startingin1.8,tokens expire
after24hoursbydefault(ifyourequirea non-expiring
tokenuse–token-ttl0)[certificates]Generatedca
certificateandkey.[certificates]Generatedapiserver
certificateandkey.[certificates]apiserver serving certissignedforDNS
names[node1 kubernetes kubernetes.defaultkubernetes.default.svc
kubernetes.default.svc.cluster.local]andIPs[10.96.0.1192.168.61.11][certificates]Generatedapiserver-kubelet-client
certificateandkey.[certificates]Generatedsa
keyandpublickey.[certificates]Generatedfront-proxy-ca
certificateandkey.[certificates]Generatedfront-proxy-client
certificateandkey.[certificates]Validcertificatesandkeys now
existin”/etc/kubernetes/pki”[kubeconfig]WroteKubeConfigfile to
disk:”admin.conf”[kubeconfig]WroteKubeConfigfile to
disk:”kubelet.conf”[kubeconfig]WroteKubeConfigfile to
disk:”controller-manager.conf”[kubeconfig]WroteKubeConfigfile to
disk:”scheduler.conf”[controlplane]WroteStaticPodmanifestforcomponent
kube-apiserver
to”/etc/kubernetes/manifests/kube-apiserver.yaml”[controlplane]WroteStaticPodmanifestforcomponent
kube-controller-manager
to”/etc/kubernetes/manifests/kube-controller-manager.yaml”[controlplane]WroteStaticPodmanifestforcomponent
kube-scheduler
to”/etc/kubernetes/manifests/kube-scheduler.yaml”[etcd]WroteStaticPodmanifestforalocaletcd
instance to”/etc/kubernetes/manifests/etcd.yaml”[init]Waitingforthe
kubelet to boot up the control
planeasStaticPodsfromdirectory”/etc/kubernetes/manifests”[init]Thisoften
takes around a minute;orlongerifthe control plane images have to be
pulled.[apiclient]Allcontrol plane components are healthy
after28.505733seconds[uploadconfig]Storingthe configuration
usedinConfigMap”kubeadm-config”inthe”kube-system”Namespace[markmaster]Willmark
node node1asmasterbyadding a labelanda taint[markmaster]Masternode1
taintedandlabelledwithkey/value:node-role.kubernetes.io/master=””[bootstraptoken]Usingtoken:9e68dd.7117f03c900f9234[bootstraptoken]ConfiguredRBAC
rules to allowNodeBootstraptokens to postCSRsinorderfornodes
togetlongterm certificate credentials[bootstraptoken]ConfiguredRBAC
rules to allow the csrapprover controller automatically
approveCSRsfromaNodeBootstrapToken[bootstraptoken]Creatingthe”cluster-info”ConfigMapinthe”kube-public”namespace[addons]Appliedessential
addon:kube-dns[addons]Appliedessential
addon:kube-proxyYourKubernetesmaster has initialized
successfully!Tostartusingyour cluster,you need to run(asa regular
user):mkdir-p $HOME/.kube

sudo cp-i/etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id-u):$(id-g)$HOME/.kube/configYoushould now deploy a pod
network to the cluster.Run”kubectl apply -f [podnetwork].yaml”withone
of the options listed at:
now join any number of machinesbyrunning the following on each
nodeasroot:kubeadm
join–token9e68dd.7117f03c900f9234192.168.61.11:6443–discovery-token-ca-cert-hash
sha256:82a08ef9c830f240e588a26a8ff0a311e6fe3127c1ee4c5fc019f1369007c0b7

地点记录了完结的初阶化输出的始末。

里面由以下重点内容:

kubeadm
1.八当下还地处beta状态,还不能用于生产条件。近年来来看那东博洛尼亚装的etcd和apiserver都是单节点,当然无法用于生产条件。

RBAC方式已经在Kubernetes 一.8中安生可用。kubeadm 一.八也暗中同意启用了RBAC

接下去是生成证书和相关的kubeconfig文件,那几个近年来大家在Kubernetes 一.6高可用集群布置也是如此做的,近来没看到有啥新东西

生成token记录下来,后面使用kubeadm join往集群中增添节点时会用到

其它注意kubeadm还报了starting in 1.八, tokens expire after 24 hours by
default (if you require a non-expiring token use –token-ttl 0)的警告

下边包车型大巴命令是布局常规用户怎样利用kubectl访问集群:

mkdir-p $HOME/.kube

sudo cp-i/etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id-u):$(id-g)$HOME/.kube/config

最后交给了将节点插手集群的通令kubeadm join –token
玖e68dd.71壹7f0三c900f923四 192.16八.6一.1一:64四三 –discovery-token-ca-cert-hash
sha25陆:82a08ef9c830f240e58八a2陆a8ff0a31壹e6fe31二七c1ee四c伍fc01玖f136900七c0b七

翻开一下集群状态:

kubectlgetcs

NAME                STATUS    MESSAGE              ERROR

schedulerHealthyok

controller-managerHealthyok

etcd-0Healthy{“health”:”true”}

鲜明个零件都地处healthy状态。

集群开头化倘若遇上标题,能够采取下边包车型客车下令实行清理:

kubeadm reset

ifconfig cni0 down

ip linkdeletecni0

ifconfig flannel.1down

ip linkdeleteflannel.1rm-rf/var/lib/cni/

4.安装Pod Network

接下去安装flannel network add-on:

mkdir-p~/k8s/wget

apply-f  kube-flannel.yml

clusterrole”flannel”created

clusterrolebinding”flannel”created

serviceaccount”flannel”created

configmap”kube-flannel-cfg”created

daemonset”kube-flannel-ds”created

那边注意kube-flannel.yml这么些文件中早已包涵了瑟维斯Account,
ClusterRole和ClusterRoleBinding,原来是在2个独门的kube-flannel-rbac.yml文件中。kube-flannel.yml这一个文件里的flannel的镜像是0.九.0,quay.io/coreos/flannel:v0.玖.0-amd6四

固然Node有多个网卡的话,参考flannel issues
39701,近年来亟待在kube-flannel.yml中选择–iface参数钦赐集群主机内网网卡的名称,不然只怕会现出dns无法解析。需求将kube-flannel.yml下载到本地,flanneld运行参数加上–iface=

……apiVersion:extensions/v1beta1

kind:DaemonSetmetadata:name:kube-flannel-ds……containers:-name:kube-flannel

image:quay.io/coreos/flannel:v0.9.0-amd64

command:[“/opt/bin/flanneld”,”–ip-masq”,”–kube-subnet-mgr”,”–iface=eth1″]……

使用kubectl get pod –all-namespaces -o
wide确定保证全部的Pod都地处Running状态。

kubectlgetpod–all-namespaces-o wide

五.master node参预工作负荷

利用kubeadm初阶化的集群,出于安全思考Pod不会被调度到Master
Node上,也正是说Master Node不参与工业作负荷。

此间搭建的是测试环境可以使用上面包车型地铁通令使Master Node参与工作负荷:

kubectl taint nodes node1
node-role.kubernetes.io/master-node”node1″untainted

6.测试DNS

kubectl run curl–image=radial/busyboxplus:curl-i–ttyIfyou don’t see a
command prompt, try pressing enter.

[ root@curl-2716574283-xr8zd:/ ]$

进入后举办nslookup kubernetes.default确认解析寻常:

nslookup
kubernetes.defaultServer:10.96.0.10Address1:10.96.0.10kube-dns.kube-system.svc.cluster.localName:kubernetes.defaultAddress1:10.96.0.1kubernetes.default.svc.cluster.local

七.向Kubernetes集群增添Node

上边我们将k8s-node二那一个主机增加到Kubernetes集群中,在k8s-node二上实施:

kubeadm
join–token9e68dd.7117f03c900f9234192.168.61.11:6443–discovery-token-ca-cert-hash
sha256:82a08ef9c830f240e588a26a8ff0a311e6fe3127c1ee4c5fc019f1369007c0b7[kubeadm]WARNING:kubeadmisinbeta,pleasedonotuseitforproduction
clusters.[preflight]Runningpre-flight checks[discovery]Tryingto
connect to APIServer”192.168.61.11:6443″[discovery]Createdcluster-info
discovery client,requesting
infofrom”
to validate TLS against the pinnedpublickey[discovery]Clusterinfo
signatureandcontents are validandTLS certificate validates against
pinned
roots,willuseAPIServer”192.168.61.11:6443″[discovery]Successfullyestablished
connectionwithAPIServer”192.168.61.11:6443″[bootstrap]Detectedserver
version:v1.8.0[bootstrap]Theserver supports
theCertificatesAPI(certificates.k8s.io/v1beta1)Nodejoin
complete:*Certificatesigning request sent to masterandresponse

received.*Kubeletinformed ofnewsecure connection details.Run’kubectl
get nodes’on the master to seethismachine join.

本次非凡顺遂,下边在master节点上推行命令查看集群中的节点:

kubectlgetnodes

NAME      STATUS    ROLES    AGE      VERSION

node1Readymaster25mv1.8.0node2Ready10mv1.8.0

哪些从集群中移除Node

就算急需从集群中移除node2那几个Node实践上边包车型地铁下令:

在master节点上进行:

kubectl drain node2–delete-local-data–force–ignore-daemonsets

kubectldeletenode node2

在node2上执行:

kubeadm reset

ifconfig cni0 down

ip linkdeletecni0

ifconfig flannel.1down

ip linkdeleteflannel.1rm-rf/var/lib/cni/

捌.dashboard插件安顿

注意日前dashboard的本子现已是壹.7.壹了。
而1.柒.x版本的dashboard对克拉玛依做了巩固,暗中同意必要以https的措施访问,扩张了登入的页面,同时扩大了二个gcr.io/google_containers/kubernetes-dashboard-init-amd64的init容器。

别的索要专注dashboard调节了布署文件的源码目录结构:

mkdir-p~/k8s/wget

create-f kubernetes-dashboard.yaml

kubernetes-dashboard.yaml文件中的ServiceAccount kubernetes-dashboard只有相对非常小的权柄,由此大家创设三个kubernetes-dashboard-admin的ServiceAccount并赋予集群admin的权能,创立kubernetes-dashboard-admin.rbac.yaml:

—apiVersion:v1

kind:ServiceAccountmetadata:labels:k8s-app:kubernetes-dashboard

name:kubernetes-dashboard-adminnamespace:kube-system—apiVersion:rbac.authorization.k8s.io/v1beta1

kind:ClusterRoleBindingmetadata:name:kubernetes-dashboard-admin

labels:k8s-app:kubernetes-dashboard

roleRef:apiGroup:rbac.authorization.k8s.io

kind:ClusterRolename:cluster-admin

subjects:-kind:ServiceAccountname:kubernetes-dashboard-adminnamespace:kube-system

kubectl create-f kubernetes-dashboard-admin.rbac.yaml

serviceaccount”kubernetes-dashboard-admin”created

clusterrolebinding”kubernetes-dashboard-admin”created

查看kubernete-dashboard-admin的token:

kubectl-n kube-systemgetsecret|grep kubernetes-dashboard-admin

kubernetes-dashboard-admin-token-pfss5 
kubernetes.io/service-account-token314skubectl describe-n kube-system
secret/kubernetes-dashboard-admin-token-pfss5Name:kubernetes-dashboard-admin-token-pfss5Namespace:kube-systemLabels:Annotations:kubernetes.io/service-account.name=kubernetes-dashboard-admin

kubernetes.io/service-account.uid=1029250a-ad76-11e7-9a1d-08002778b8a1Type:kubernetes.io/service-account-tokenData====ca.crt:1025bytesnamespace:11bytes

token:eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZC1hZG1pbi10b2tlbi1wZnNzNSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZC1hZG1pbiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjEwMjkyNTBhLWFkNzYtMTFlNy05YTFkLTA4MDAyNzc4YjhhMSIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTprdWJlcm5ldGVzLWRhc2hib2FyZC1hZG1pbiJ9.Bs6h65aFCFkEKBO_h4muoIK3XdTcfik-pNM351VogBJD_pk5grM1PEWdsCXpR45r8zUOTpGM-h8kDwgOXwy2i8a5RjbUTzD3OQbPJXqa1wBk0ABkmqTuw-3PWMRg_Du8zuFEPdKDFQyWxiYhUi_v638G-R5RdZD_xeJAXmKyPkB3VsqWVegoIVTaNboYkw6cgvMa-4b7IjoN9T1fFlWCTZI8BFXbM8ICOoYMsOIJr3tVFf7d6oVNGYqaCk42QL_2TfB6xMKLYER9XDh753-_FDVE5ENtY5YagD3T_s44o0Ewara4P9C3hYRKdJNLxv7qDbwPl3bVFH3HXbsSxxF3TQ

在dashboard的登入窗口使用方面包车型地铁token登入。

玖.heapster插件布置

上面安装Heapster为集群加多使用总结和督察成效,为Dashboard加多仪表盘。
使用InfluxDB做为Heapster的后端存款和储蓄,早先计划:

mkdir-p~/k8s/heapster

cd~/k8s/heapster

wget

create-f./

说起底确认全部的pod都处于running状态,张开Dashboard,集群的施用计算会以仪表盘的花样展示出来。

这一次安装涉及到的Docker镜像:

gcr.io/google_containers/kube-apiserver-amd64:v1.8.0gcr.io/google_containers/kube-controller-manager-amd64:v1.8.0gcr.io/google_containers/kube-scheduler-amd64:v1.8.0gcr.io/google_containers/kube-proxy-amd64:v1.8.0gcr.io/google_containers/k8s-dns-sidecar-amd64:1.14.5gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.5gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.5quay.io/coreos/flannel:v0.9.0-amd64

gcr.io/google_containers/etcd-amd64:3.0.17gcr.io/google_containers/pause-amd64:3.0quay.io/coreos/flannel:v0.9.0-amd64

gcr.io/google_containers/kubernetes-dashboard-amd64:v1.7.1gcr.io/google_containers/kubernetes-dashboard-init-amd64:v1.0.0gcr.io/google_containers/heapster-influxdb-amd64:v1.3.3gcr.io/google_containers/heapster-grafana-amd64:v4.4.3gcr.io/google_containers/heapster-amd64:v1.4.0

相关文章