内网安装

By admin in 美高梅手机版4858 on 2019年4月16日

一得之见

环境

  • centos 7 amd64 两台
  • kubernetes 1.10

陪同着k八s一.10版本的揭露,前日先在一台机械上搭建了k捌s单机版集群,即既是master,也是node,依据经验,将
kubeadm init 提示的 kubeadm join
记录下来,方便以后新扩展集群集职业节点(机器)时,能够一贯复用,紧接着就布署dashboard、heapster、ElasticSearch、Redis、dotnet
微服务等等,一挥而就,集群状态优良,因为事先测试环境搞过k八s,呵呵 ……
。过了两日公司购买的第2胎服务器到了,那么就任其自然的在地点推行以前记录的
kubeadm join 脚本,结果如下:

美高梅手机版4858 1
看看这一个提示音信,作者完全百分之百地信任,node
已经参与集群,并且只要等说话,通过 kubectl get nodes 就能够看出
node is ready,嘿嘿
过一会儿,又过壹会,再过1会儿 …… ,不过
美高梅手机版4858 2

Kubernetes是谷歌(Google)大神开源的器皿管理组件,常被称之为K8s
(PS:K表示第三个假名,s表示最后三个假名,八意味着中间一共有七个字母:) ).
被Docker的使用者用于Docker服务的编写和治本。尽管Docker家出了Swarm用来管理Docker,可是当前来看,使用K8s的照样居多。

kubeadm是Kubernetes官方提供的飞跃安装和起始化Kubernetes集群的工具,近来的还处在孵化开垦情况,伴随Kubernetes每种版本的发表都会一同创新。
当然,近年来的kubeadm是无法用来生产环境的。
但伴随着Kubernetes每便版本晋级,kubeadm都会对集群配置方面包车型地铁有些举办做调整,通过试验kubeadm我们能够学学到Kubernetes官方在集群配置上一些新的特等施行。

使用Kubeadm部署k8s集群

三步装集群:离线包地址

天堂取经,历经九九八101难

然后,开启重试情势,发扬程序员不掘不挠的价值观精神:

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

跻身重试死循环N次,耐性真好,哈哈。明明提示
This node has joined the cluster
,为何实况是那样吗,难道那正是精美和现实的距离,其实那正是
,out了呢。作者想了又想,看了又看,未有一丝丝错误、警告之类的新闻,无从动手啊,咋做吧,最终如故把关切点放在了kubelet(何人叫你是
node agent,肯定拿你开刀啊,呵呵)上,于是起先查阅kuberlet的日记:

美高梅手机版4858 3

看来了啊

error: failed to run Kubelet: failed to create kubelet:
misconfiguration: kubelet cgroup driver: “cgroupfs” is different from
docker cgroup driver: “systemd”
原来那么些小意思呀,哎。。。。。。,笔者又再3次相信了那么些k八s的提醒音信,然后起先创新bug了

美高梅手机版4858 4

美高梅手机版4858 5

信了你的邪哦,为何 kubelet cgroup driverdocker cgroup driver
一模同样,刚刚,kubelet
日志里面不是。。。明明。。。却。。。,淡定,那说不定是幻觉,好呢。到底哪些是实在,什么是假的,能还是不可能给2个准儿的提示音讯,既然也不是kubelet的标题,又是新型的版本,也从没资料可查,当下实在不能了,那就去
kubernets#62776
Issues呢,于是乎,就这么下班了。。。。

美高梅手机版4858 6

其次天,第叁件业务正是查看前日提的难点是不是有人回复了,结果看到被多少个印度阿三给关闭了

美高梅手机版4858 7

啊,和明日预期的结果壹眼,好像有些诸葛了啊,嘿嘿,那还是靠自个儿吗,又想了又想,看了又看,真的是尚未一小点防护啊,时期检查了
kubeadm内网安装。、kubectlkubelet,也查看来了种种配置;也想过是或不是master提前安装的有的事物影响了,因为原先都以
kubeadm init 后,然后就当下
·kubeadm join;还想过是还是不是环境的主题素材,因为事先的测试环境一贯是Ubuntu 16.4,以后的主机环境是
CentOS 7。本想着明天晚上,搞不定,就遵照测试环境的步骤,重来来过,然后,照旧不肯放任(天生正是当程序员的料子啊,正是头有点冷,呵呵),于是从其它的角度去想想,可疑是还是不是记录的
‘kube join token=…. ‘,有标题啊(在此以前为何没狐疑,是因为自个儿是平昔复制
kubeadm init
打字与印刷出来的原生脚本,而且测试环境一点主题素材都未曾。),于是从头顺藤摸瓜,排查第1个参数
token,执行命令 kubeadm token list

美高梅手机版4858 8

K八s的多少个概念
  • Pod
    K捌s安顿调度的矮小单元,运转在node节点上。运营在同1个Pod内的多个容器共享同样的网络命名空间、IP地址和端口。
  • RC (Replication Controller)
    TiguanC用来担保Pod遵照一定的备份数运维。
  • Service
    Service定义了Pod的逻辑集合和走访战略…
  • Node
    Node是k捌s集群中Pod运营的节点。

Kubernetes
1.81度昭示,为了跟上合法更新的剧本,接下去感受一下Kubernetes
1.第88中学的kubeadm。

基本功条件

关闭swap

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

装那两工具假诺没装的话

yum install -y ebtables socat

IPv4 iptables 链设置 CNI插件需求

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

修成正果,立地成佛

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

美高梅手机版4858 9

中标了,终于不负众望了,这是搞 kubernetes
以来,踩的最迷糊的三次坑,最终自个儿答复了自身的
kubernets#62776
,顺便也给kubernetes
提了一下提议,希望提醒消息能够规范些,他们的一小步,正是大家的一大步啊。。。。。

美高梅手机版4858 10

K八s集群布置格局

有关K捌s的集群布署格局有这几个,比如说tar包/rpm下载安装,手动配置。那种办法相比艰苦。自从K八s
1.5本子后,新添了kubeadm
init方法,可以火速的装置k8s集群。就算眼下以此办法或许beta版本,并且被告诫不要在生育环境中运用
(: ,可是透过我的测试,kubeadm init能够方便的布局k8s,期待早日转正 🙂

以下是小编在接纳kubeadm
init布署进度中整理的秘诀记录,超过1/三出自官方文书档案:
https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/
除此以外加了有的在经过中遇见的主题素材和平解决决办法,以供参考。

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
,过期时间是2肆小时,那正是为何过了1天不可能再度行使从前记录的
kube join 原生脚本的缘故,也足以运作
kubeadm token create --ttl 0更改2个决但是期的
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

一.一系统布置

离线安装

惠及,笔者已经把持有依赖的镜像,二进制文件,配置文件都打成了包,化解您具有正视,花了不少光阴整理这几个,放在了Ali云市集上,希望大家给点小援助
离线包地址赏作者1杯咖啡

这包里面把超越58%操作都写在简短的脚本里面了,在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"
  • 配备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

在安装在此以前,须要先做如下准备。两台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要1致。
能够用 docker info |grep Cgroup 查看,有希望是systemd 也许 cgroupfs

增添主机名解析

为了防止无法解析主机名,修改/etc/hosts把主机名与ip的炫人眼目写上

假诺你对 kubernets 和 dotnet 感兴趣的话能够关切自身,笔者会定期的在博客分享自身的学习心得

安装kubeadm和kubelet

此番安装选取的是1.陆.陆本子。

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 化解1个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的装置文书档案中,本步骤最简便,唯有1行命令,可是在实操进程中也是最轻便出标题标一步。
登录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
此处有坑二

此时1般会卡到 [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:31707 就足以访问dashboard了, 但是。。 还不能够用。

创造1个 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
配置互连网插件。

美高梅手机版4858 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相关已经成功开创并拉起。

美高梅手机版4858 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改成1致

节点not ready ?

提出安装calico网络,假使要把主节点当成node节点需求加个命令:

 

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

dashboard 访问不了?

假诺是NodePort格局访问,这须求通晓dashboard服务实际调度到哪些节点上去了。访问拾贰分节点的ip而不是master的ip。
充足的话把https 改成http试试。

翻开具体在哪个节点

 

kubectl get pod -n kube-system -o wide

拉取镜像失败?

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

dashboard crash, dns起不来?

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

192.16八网段与calico网段争辩?

即使您碰巧也是1玖贰.168网段,那么提出修改一下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

美高梅手机版4858 13

给集群加入节点

master起始化达成后,能够向此K捌s集群扩张node节点。一条轻巧的join命令即可成功。
登录到node节点,执行:

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

中间token能够在master节点实行 kubeadm token list 查看,
此外默许的master-port壹般是6443.

美高梅手机版4858 14

image.png

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

此间有坑3

基于官方文书档案,实践完此语句后,在master节点上通过 kubeadm get nodes
就足以查看到曾经将node节点出席集群。但是在实际操作中,发未来node节点上实践join语句成功,然则在master节点上看不到新添的node节点。
在node节点上查看kubelet, 发现kubelet未有运维。在node节点上实践
journalctl -xeu kubelet 看到和master节点此前同样的主题素材,cgroup
driver不一致。经过同样的消除方法,成功将node节点拉起后,过几分钟在master节点上查看,已经能够展现新增加的节点了。

配置轻松的K八s集群达成。

实行sysctl -p /etc/sysctl.d/k8s.conf使修改生效。

禁用SELINUX:

setenforce0

vi/etc/selinux/config

SELINUX=disabled

Kubernetes
一.八起先渴求关闭系统的Swap,倘使不关门,私下认可配置下kubelet将不可能起动。能够由此kubelet的启航参数–fail-swap-on=false更换那一个范围。
大家那里关闭系统的Swap:

swapoff-a

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

swappiness参数调节,修改/etc/sysctl.d/k捌s.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 1.八曾经针对性Docker的1.1壹.二, 1.12.六,
壹.一叁.一和一柒.0叁.2等版本做了表明。
因为大家那边在各节点安装docker的壹7.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.壹三版本开头调节了暗中认可的防火墙规则,禁止使用了iptables
filter表中FOWA奥迪Q5D链,那样会滋生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.伍.1本子

socat是kubelet的依赖

大家在此之前在Kubernetes 壹.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/10-kubeadm.conf文件,在那之中蕴含如下内容:

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

使用docker info打印docker信息:

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

能够见见docker 17.0三选拔的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起先化集群,选取node一作为Master
Node,在node壹上举办上面包车型大巴一声令下:

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=拾.24四.0.0/16。

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]美高梅手机版4858,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
壹.8当下还地处beta状态,还不能够用来生产条件。近来来看那东长沙装的etcd和apiserver都以单节点,当然无法用来生产条件。

RBAC格局已经在Kubernetes 一.8中稳固可用。kubeadm 1.八也暗中认可启用了RBAC

接下去是生成证书和血脉相通的kubeconfig文件,那个近期大家在Kubernetes 1.6高可用集群陈设也是那般做的,如今没见到有哪些新东西

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

其余注意kubeadm还报了starting in 一.八, tokens expire after 二四 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
九e6八dd.7117f0三c900f923四 19二.16八.六一.1一:6443 –discovery-token-ca-cert-hash
sha25陆:8二a0八ef九c830f240e58八a2陆a捌ff0a31一e6fe31二七c一ee四c伍fc01九f136900柒c0b7

查看一下集群状态:

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那些文件中早已包涵了ServiceAccount,
ClusterRole和ClusterRoleBinding,原来是在三个单身的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

5.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

7.向Kubernetes集群增添Node

上边大家将k8s-node贰这一个主机增加到Kubernetes集群中,在k捌s-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

1旦要求从集群中移除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的本子现已是一.柒.壹了。
而壹.七.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登6。

玖.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

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有