使用kubeadm安装安全高可用kubernetes集群安装包地址如果不是高-可用性安装,请忽略本教程,直接观看产品页面进行三步安装。单主进程:解压单主视频教程后,cdshell&&shinit.shonthemaster,然后shmaster.sh(注意当前目录会找不到文件,因为脚本使用的是相对路径)cdshell在节点上&&shinit.sh。然后在节点上执行master输出的join命令,实现高可用。提前准备如下。假设你搭建一个3master+2node的k8s集群。5个节点的常见情况如下:(yuminstall-ydocker是1.12.6版本,需要改成cg)17.06安装教程:#0。删除旧的$yumremove-ydocker*#如果你默认是之前yum安装的1.12版本,没有安装可以跳过这一步#1.安装所需的软件包$yuminstall-yyum-utils\device-mapper-persistent-data\lvm2#2。添加源,否则默认找不到$yum-config-manager\--add-repo\https://download.docker.com/linux/centos/docker-ce.repo#3。根据实际情况查找当前版本(可选)$yumlistdocker-ce--showduplicates|排序-r#4。版本确定了就直接安装,如果要安装17.03直接修改以下数字即可$yuminstalldocker-ce-17.06.1.ce#idea版本填写包名的格式。#5。启动docker服务,并启动boot$systemctlstartdocker&&systemctlenabledockersuggestsbinarymethodsadvanced部署docker-compose后,步骤参考以下文章。建议永久关闭selinux和swap,以免后续出现问题。建议停止关闭firewalld/iptables等防火墙。请记住在启动新节点后更改网络名称。hostnamectlset-hostnamemasterX节点必须可以内网互通如果稳定环境有问题,查看日志journalctl-n10,查看运行日志tail-f10/var/log/messages系统架构图kubectldashboard|V+----------------------+加入|磅10.1.245.94|<---节点+------------------------+||--master1manager1schedule110.1.245.93|--master2manager2schedule210.1.245.95==============>etcd集群http://10.1.245.93:2379,http://10.1.245.94:2379,http://10.1.245.95:2379|--master3manager3schedule310.1.245.94安装包介绍解压后可以看到如下目录:├──bin所需的k8s相关bin文件│├──kubeadm│├──kubectl│└──kubelet├──image依赖的所有镜像包│└──images.tar├──out所有配置文件│├───dashboard仪表板相关配置││├──dashboard-admin.yaml││└──kubernetes-dashboard.yaml│├──etcd相关配置│├──etcd-docker-compose-0.yml││├──etcd-docker-compose-1.yml││└──etcd-docker-compose-2.yml│├──haproxyhaproxy相关配置││└──haproxy.cfg│├──heapsterheapster相关yaml配置││├──influxdb│││├──grafana.yaml││├──heapster.yaml││└──influxdb.yaml││└──rbac││└──heapster-rbac.yaml││──kubek8s自配置││├──10-kubeadm.conf││├──configkubeadm配置││└──kubelet.service│├──kubeinit.jsonignore│└──net网络相关配置│├──calico.yaml│└──calicoctl.yaml└──shell初始化脚本├──init.sh初始化节点、安装bin文件、systemd配置等└──master.sh执行kubeadminit等组件初始化node因为解压包,然后通过scp-rxxxroot@ip:/root的方式分发解压包打包到其他节点集群所有节点都需要执行cdshell&&shinit.sh(如果只运行单master,还需要执行shmaster.sh,不要运行多master)。有以下几点需要注意:修改init.sh脚本后面添加,如果二进制程序没有可执行权限chmod+x/usr/bin/kube*cgroupsdriver需要选择docker17.0x版本,没有需要调整一下,如果是1.1x版本的docker,需要手动修改kubelet的启动文件中的cgroups配置为systemd(修改位置/etc/systemd/system/kubelet.service.d)而dockerinfo|grepCg要提前修改默认的init或者手动执行sysctl-wnet.ipv4.ip_forward=1,否则先执行完七行报错,查看kubectlgetpod-nkube-system通过命令,状态都是Running。正常启动etcd集群。使用docker-compose部署etcd集群安装。A.使用docker-compose启动,如果没有安装:$pipinstalldocker-composeB。用二进制包启动docker-compose(离线可选)$wgethttps://github.com/docker/compose/releases/download/1.18.0/docker-compose-Linux-x86_64#官方推荐使用curl,不推荐$mvdocker-compose-Linux-x86_64/usr/local/bin/docker-compose&&chmoda+x/usr/local/bin/docker-compose#还有写+x。#这样就完成了,测试$docker-composeversion#下面是正常输出docker-composeversion1.18.0,build8dd22a9docker-pyversion:2.6.1CPythonversion:2.7.13OpenSSLversion:OpenSSL1.0.1t3MAy2016在out/etcd目录下有一个相关的模板etcd-docker-compose-x.yam。启动多个节点时,修改为自己的ip地址。另外两个节点复制修改ip。图像行应该改为gcr.io/google_containers/etcd-amd64:3.1.11,实际上只是改变版本号#需要修改所有包含ip的地方,下面第9、10、11、12行改为当前节点ip,第15行三个ip的顺序改为etcd集群部署的三个节点ipversion:'2.1'services:etcd0:container_name:etcd_infra0image:gcr.io/google_containers/etcd-amd64:3.0.17#这里最后的变化是3.1.11命令:|etcd--nameinfra0--initial-advertisie-peer-urlshttp://10.230.204.160:2380--listen-peer-urlshttp://10.230.204.160:2380--listen-client-urlshttp://10.230.204.160:2379,http://127.0.0.1:2379--advertise-client-urlshttp://10.230.204.160:2379--data-dir/etcd-data.etcd--initial-cluster-tokenetcd-cluster-1--initial-clusterinfra0=http://10.230.204.160:2380,infra1=http://10.230.204.165:2380,infra2=http://10.230.204.151:2380--initial-cluster-状态新重启:始终卷:-/data/etcd-data.etcd:/etcd-data。etcdnetwork_mode:"host"三个节点分别启动:$docker-compose-fout/etcd/etcd-docker-compose-x.ymlup-d#NormaloutputCreatingetcd_infrax...donex检查每个etcd号是否安装成功:$dockerexecetcd_infra0etcdctlmemberlist#Master1可能运行一个error很容易提示容器正在重启。原因暂时未知,其他高手可以#成功应该类似显示5ded6dd284b89d31:name=infra1peerURLs=http://10.230.204.153:2380clientURLs=http://10.230.204.153:2379isLeader=true6d4b5eee32c1497a:name=infra0peerURLs=http://10.230.204.150:2380clientURLs=http://10.230.204.150:2379isLeader=false729d9cd56debb1a1:name=infra2peerURLs=http://10.230.204.154:2380clientLeadURLs=http://10.230.204.19isLeader=false#如果有peerURL没有显示,说明没有成功,尝试去掉重新创建$docker-compose-fout/etcd/etcd-docker-compose-x.ymldown-vkubeadmconfigurationmodifyconfigurationout/kube/configfileapiVersion:kubeadm.k8s.io/v1alpha1kind:MasterConfigurationapiServerCertSANs:#这里填写所有的masterip和lbip等你可能需要通过它访问apiserver的地址和域名或主机名,比如作为阿里fip,证书中会允许这些ip-172.31。244.231-172.31.244.232-172.31.244.233-172.31.244.234-master1-master2-master3-node1-47.75.1.72etcd:endpoints:#这里填写之前安装的etcd集群地址列表,修改IP地址-http://172.31。244.232:2379-http://172.31.244.233:2379-http://172.31.244.234:2379apiServerExtraArgs:endpoint-reconciler-type:leasenetworking:podSubnet:192.168.0.0/16#不用改kubernetesVersion:v1.9.2#不用改featureGates:#不用改CoreDNS:true然后执行:$kubeadminit--configout/kube/config存在成功的kubeadmjoin命令文件里,那个东西不能丢。启动calico等mkdir~/.kube&&cp/etc/kubernetes/admin.conf~/.kube/config(如果已经存在,请检查是否相同,如果不确定,建议删除并重新cp过去)修改calico配置,把etcd地址换成你安装的集群地址:out/net/calico.yaml:kind:ConfigMapapiVersion:v1metadata:name:calico-confignamespace:kube-systemdata:#您的etcd集群的位置。这使用下面定义的服务clusterIP#。etcd_endpoints:"http://10.96.232.136:6666"#这里改成etcd集群地址如"http://172.31.244.232:2379,http://172.31.244.233:2379,http://172.31.244.234:2379"$kubectlapply-fout/net/calico.yaml$kubectlapply-fout/heapster/influxdb$kubectlapply-fout/heapster/rbac$kubectlapply-fout/dashboard#以上命令即可集成到$kubectlapply-fout/net/calico.yaml-fout/heapster/influxdb-fout/heapster/rbac-fout/dashboard然后访问https://master1IP:32000端口即可,在chrome下无法进入,提示证书错误。可以更换firefox,提示证书日期错误(待修复)。启动多个主人。第一个master叫master0(假设其他master已经init.sh),现在把第一个master的/etc/kubernetes/pki目录复制到另一个master节点$mkdir-p/etc/kubernetes$scp-r/etc/kubernetes/pkiroot@10.1.245.93:/etc/kubernetes/pki删除pki目录rm-rfapiserver.crtapiserver.key下的apiserver.crt和apiserver.key文件,注意如果不删除,你只会看到一个主人,这是不正常的同样使用master0上的out/kube/config文件,复制内容,复制到master1,scpout/kube/configroot@10.230.204.151:/root/执行kubeadminit--config~/configmaster2nodeandmaster1startloadbalance推荐使用四层代理HAproxy配置out/haproxy目录:viout/haproxy/haproxy.cfgglobaldaemonlog127.0.0.1local0log127.0.0.1local1noticemaxconn4096defaultslogglobalretries3maxconn2000timeoutconnect5stimeoutclientfrontserver50sk8sbind*:6444modetcpdefault_backendk8s-backendbackendk8s-backendbalanceroundrobinmodetcp#把下面三个ip换成自己主服务器的三个地址k8s-110.1.245.93:6443checkserverk8s-110.1.245.94:6443checkserverk8s-210.1.245.95:6443首先检查mkdir/etc/haproxy然后复制这个文件到cpout/haproxy/haproxy.cfg/etc/haproxy/haproxy.cfg$dockerrun--net=host-v/etc/haproxy:/usr/local/etc/haproxy--nameha-dhaproxy:1.7修改kubeproxy配置$kubectl-nkube-systemeditconfigmapkube-proxy找到master地址,修改为LB地址,端口6444(这里是必不可少的怎么知道哪一个是LB的地址呢?上面配置后,三个masterIP轮询不知道哪个是LB地址)#找到这一段文件,第七行server有一个ip地址apiVersion:v1kind:Configclusters:-cluster:certificate-authority:/var/run/secrets/kubernetes.io/serviceaccount/ca.crtserver:https://10.230.204.151:6443#修改为LoadBalanceIP:6444name:defaultcontexts:-context:cluster:defaultnamespace:defaultuser:defaultname:defaultcurrent-context:defaultusers:-name:defaultuser:tokenFile:/var/run/secrets/kubernetes.io/serviceaccount/tokenjoinnode节点或者在node节点上执行第一个master输出的命令$kubeadmjoin--token
