您的位置:首页 > 其它

kubernetes 集群的安装部署

2016-08-17 17:38 736 查看
本文来自我的githubpages博客http://galengao.github.io/即www.gaohuirong.cn摘要:首先kubernetes得官方文档我自己看着很乱,信息很少,所以结合了很多博客搭建的其次因为既然用到docker,当然离不开kubernetes管理,还有swarm,前者管理复杂,但功能齐全这里仅仅是安装部署,还未使用,具体使用出现问题后续更新

前提条件

系统时centos7上关闭防火墙systemctlstopfirewalld.service关闭selinuxvi/etc/selinux/comfig

主要组件说明

Kubernetes集群中主要存在两种类型的节点,分别是master节点,以及minion节点。Minion节点是实际运行Docker容器的节点,负责和节点上运行的Docker进行交互,并且提供了代理功能。Master节点负责对外提供一系列管理集群的API接口,并且通过和Minion节点交互来实现对集群的操作管理。apiserver:用户和kubernetes集群交互的入口,封装了核心对象的增删改查操作,提供了RESTFul风格的API接口,通过etcd来实现持久化并维护对象的一致性。scheduler:负责集群资源的调度和管理,例如当有pod异常退出需要重新分配机器时,scheduler通过一定的调度算法从而找到最合适的节点。controller-manager:主要是用于保证replicationController定义的复制数量和实际运行的pod数量一致,另外还保证了从service到pod的映射关系总是最新的。kubelet:运行在minion节点,负责和节点上的Docker交互,例如启停容器,监控运行状态等。proxy:运行在minion节点,负责为pod提供代理功能,会定期从etcd获取service信息,并根据service信息通过修改iptables来实现流量转发(最初的版本是直接通过程序提供转发功能,效率较低。),将流量转发到要访问的pod所在的节点上去。etcd:key-value键值存储数据库,用来存储kubernetes的信息的。flannel:Flannel是CoreOS团队针对Kubernetes设计的一个覆盖网络(OverlayNetwork)工具,需要另外下载部署。我们知道当我们启动Docker后会有一个用于和容器进行交互的IP地址,如果不去管理的话可能这个IP地址在各个机器上是一样的,并且仅限于在本机上进行通信,无法访问到其他机器上的Docker容器。Flannel的目的就是为集群中的所有节点重新规划IP地址的使用规则,从而使得不同节点上的容器能够获得同属一个内网且不重复的IP地址,并让属于不同节点上的容器能够直接通过内网IP通信。

部署规划

这里我用3台服务器搭建一个简单的集群:192.168.10.147#master节点(etcd,kubernetes-master)192.168.10.148#node节点(etcd,kubernetes-node,docker,flannel)192.168.10.149#node节点(etcd,kubernetes-node,docker,flannel)由于kubernetes的进程较多,每个节点上的进程如图:

安装

1、分别先在两个node上安装docker安装方式参照我的另一篇文章docker安装
yumupdate

tee/etc/yum.repos.d/docker.repo<<EOF
[dockerrepo]
name=DockerRepository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF

yuminstalldocker-engine
2、在master安装
yuminstallkubernetes-masteretcd-y
3、分别在两个node上安装
yuminstallkubernetes-nodeetcdflannel-y
4、etcd集群配置在master节点上编辑etcd配置文件
vi/etc/etcd/etcd.conf#[member]ETCD_NAME=etcd1ETCD_DATA_DIR="/var/lib/etcd/etcd1.etcd"#ETCD_WAL_DIR=""#ETCD_SNAPSHOT_COUNT="10000"#ETCD_HEARTBEAT_INTERVAL="100"#ETCD_ELECTION_TIMEOUT="1000"ETCD_LISTEN_PEER_URLS="http://192.168.10.147:2380"ETCD_LISTEN_CLIENT_URLS="http://192.168.10.147:2379,http://127.0.0.1:2379"CD_MAX_SNAPSHOTS="5"#ETCD_MAX_WALS="5"#ETCD_CORS=""##[cluster]ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.10.147:2380"#ifyouusedifferentETCD_NAME(e.g.test),setETCD_INITIAL_CLUSTERvalueforthisname,i.e."test=http://..."ETCD_INITIAL_CLUSTER="etcd1=http://192.168.10.147:2380,etcd2=http://192.168.10.148:2380,etcd3=http://192.168.10.149:2380"#ETCD_INITIAL_CLUSTER_STATE="new"#ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"ETCD_ADVERTISE_CLIENT_URLS="http://192.168.10.147:2379"#ETCD_DISCOVERY=""#ETCD_DISCOVERY_SRV=""#ETCD_DISCOVERY_FALLBACK="proxy"#ETCD_DISCOVERY_PROXY=""##[proxy]#ETCD_PROXY="off"#ETCD_PROXY_FAILURE_WAIT="5000"#ETCD_PROXY_REFRESH_INTERVAL="30000"#ETCD_PROXY_DIAL_TIMEOUT="1000"#ETCD_PROXY_WRITE_TIMEOUT="5000"#ETCD_PROXY_READ_TIMEOUT="0"##[security]#ETCD_CERT_FILE=""#ETCD_KEY_FILE=""#ETCD_CLIENT_CERT_AUTH="false"#ETCD_TRUSTED_CA_FILE=""#ETCD_PEER_CERT_FILE=""#ETCD_PEER_KEY_FILE=""#ETCD_PEER_CLIENT_CERT_AUTH="false"#ETCD_PEER_TRUSTED_CA_FILE=""##[logging]#ETCD_DEBUG="false"#examplesfor-log-package-levelsetcdserver=WARNING,security=DEBUG#ETCD_LOG_PACKAGE_LEVELS=""
在node1上编辑配置文件
vi/etc/etcd/etcd.conf#[member]ETCD_NAME=etcd2ETCD_DATA_DIR="/var/lib/etcd/etcd2"#ETCD_WAL_DIR=""#ETCD_SNAPSHOT_COUNT="10000"#ETCD_HEARTBEAT_INTERVAL="100"#ETCD_ELECTION_TIMEOUT="1000"ETCD_LISTEN_PEER_URLS="http://192.168.10.148:2380"ETCD_LISTEN_CLIENT_URLS="http://192.168.10.148:2379,http://127.0.0.1:2379"#ETCD_MAX_SNAPSHOTS="5"#ETCD_MAX_WALS="5"#ETCD_CORS=""##[cluster]ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.10.148:2380"#ifyouusedifferentETCD_NAME(e.g.test),setETCD_INITIAL_CLUSTERvalueforthisname,i.e."test=http://..."ETCD_INITIAL_CLUSTER="etcd1=http://192.168.10.147:2380,etcd2=http://192.168.10.148:2380,etcd3=http://192.168.10.149:2380"#ETCD_INITIAL_CLUSTER_STATE="new"#ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"ETCD_ADVERTISE_CLIENT_URLS="http://192.168.10.148:2379"#ETCD_DISCOVERY=""#ETCD_DISCOVERY_SRV=""#ETCD_DISCOVERY_FALLBACK="proxy"#ETCD_DISCOVERY_PROXY=""##[proxy]#ETCD_PROXY="off"#ETCD_PROXY_FAILURE_WAIT="5000"#ETCD_PROXY_REFRESH_INTERVAL="30000"#ETCD_PROXY_DIAL_TIMEOUT="1000"#ETCD_PROXY_WRITE_TIMEOUT="5000"#ETCD_PROXY_READ_TIMEOUT="0"##[security]#ETCD_CERT_FILE=""#ETCD_KEY_FILE=""#ETCD_CLIENT_CERT_AUTH="false"#ETCD_TRUSTED_CA_FILE=""#ETCD_PEER_CERT_FILE=""#ETCD_PEER_KEY_FILE=""#ETCD_PEER_CLIENT_CERT_AUTH="false"#ETCD_PEER_TRUSTED_CA_FILE=""##[logging]#ETCD_DEBUG="false"#examplesfor-log-package-levelsetcdserver=WARNING,security=DEBUG#ETCD_LOG_PACKAGE_LEVELS=""
在node2上编辑配置文件
vi/etc/etcd/etcd.conf#[member]ETCD_NAME=etcd3ETCD_DATA_DIR="/var/lib/etcd/etcd3"#ETCD_WAL_DIR=""#ETCD_SNAPSHOT_COUNT="10000"#ETCD_HEARTBEAT_INTERVAL="100"#ETCD_ELECTION_TIMEOUT="1000"ETCD_LISTEN_PEER_URLS="http://192.168.10.149:2380"ETCD_LISTEN_CLIENT_URLS="http://192.168.10.149:2379,http://127.0.0.1:2379"#ETCD_MAX_SNAPSHOTS="5"#ETCD_MAX_WALS="5"#ETCD_CORS=""##[cluster]ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.10.149:2380"#ifyouusedifferentETCD_NAME(e.g.test),setETCD_INITIAL_CLUSTERvalueforthisname,i.e."test=http://..."ETCD_INITIAL_CLUSTER="etcd1=http://192.168.10.147:2380,etcd2=http://192.168.10.148:2380,etcd3=http://192.168.10.149:2380"#ETCD_INITIAL_CLUSTER_STATE="new"#ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"ETCD_ADVERTISE_CLIENT_URLS="http://192.168.10.149:2379"#ETCD_DISCOVERY=""#ETCD_DISCOVERY_SRV=""#ETCD_DISCOVERY_FALLBACK="proxy"#ETCD_DISCOVERY_PROXY=""##[proxy]#ETCD_PROXY="off"#ETCD_PROXY_FAILURE_WAIT="5000"#ETCD_PROXY_REFRESH_INTERVAL="30000"#ETCD_PROXY_DIAL_TIMEOUT="1000"#ETCD_PROXY_WRITE_TIMEOUT="5000"#ETCD_PROXY_READ_TIMEOUT="0"##[security]#ETCD_CERT_FILE=""#ETCD_KEY_FILE=""#ETCD_CLIENT_CERT_AUTH="false"#ETCD_TRUSTED_CA_FILE=""#ETCD_PEER_CERT_FILE=""#ETCD_PEER_KEY_FILE=""#ETCD_PEER_CLIENT_CERT_AUTH="false"#ETCD_PEER_TRUSTED_CA_FILE=""##[logging]#ETCD_DEBUG="false"#examplesfor-log-package-levelsetcdserver=WARNING,security=DEBUG#ETCD_LOG_PACKAGE_LEVELS=""
针对几个URLS做下简单的解释:[member]ETCD_NAME:ETCD的节点名ETCD_DATA_DIR:ETCD的数据存储目录ETCD_SNAPSHOT_COUNTER:多少次的事务提交将触发一次快照ETCD_HEARTBEAT_INTERVAL:ETCD节点之间心跳传输的间隔,单位毫秒ETCD_ELECTION_TIMEOUT:该节点参与选举的最大超时时间,单位毫秒ETCD_LISTEN_PEER_URLS:该节点与其他节点通信时所监听的地址列表,多个地址使用逗号隔开,其格式可以划分为scheme://IP:PORT,这里的scheme可以是http、httpsETCD_LISTEN_CLIENT_URLS:该节点与客户端通信时监听的地址列表[cluster]ETCD_INITIAL_ADVERTISE_PEER_URLS:该成员节点在整个集群中的通信地址列表,这个地址用来传输集群数据的地址。因此这个地址必须是可以连接集群中所有的成员的。ETCD_INITIAL_CLUSTER:配置集群内部所有成员地址,其格式为:ETCD_NAME=ETCD_INITIAL_ADVERTISE_PEER_URLS,如果有多个使用逗号隔开ETCD_ADVERTISE_CLIENT_URLS:广播给集群中其他成员自己的客户端地址列表
至此etcd集群就部署完了,然后每个节点上启动
systemctlstartkube-apiserver
验证:
[root@k8s1~]#etcdctlcluster-healthmember35300bfb5308e02cishealthy:gothealthyresultfromhttp://192.168.10.147:2379member776c306b60e6f972ishealthy:gothealthyresultfromhttp://192.168.10.149:2379membera40f86f061be3fbeishealthy:gothealthyresultfrom'target='_blank'>http://192.168.10.148:2379[/code]
5、kubernetesmaster安装修改apiserver配置文件
[root@k8s1~]#vi/etc/kubernetes/apiserver####kubernetessystemconfig##Thefollowingvaluesareusedtoconfigurethekube-apiserver##Theaddressonthelocalservertolistento.#KUBE_API_ADDRESS="--insecure-bind-address=127.0.0.1"KUBE_API_ADDRESS="--address=0.0.0.0"#Theportonthelocalservertolistenon.KUBE_API_PORT="--port=8080"#PortminionslistenonKUBELET_PORT="--kubelet-port=10250"#CommaseparatedlistofnodesintheetcdclusterKUBE_ETCD_SERVERS="--etcd-servers=http://192.168.10.147:2379,http://192.168.10.148:2379,http://192.168.10.149:2379"#AddressrangetouseforservicesKUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"#defaultadmissioncontrolpoliciesKUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota"#Addyourown!KUBE_API_ARGS=""
配置controller-manager暂时不做修改
[root@k8s1etcd]#vi/etc/kubernetes/controller-manager####Thefollowingvaluesareusedtoconfigurethekubernetescontroller-manager#defaultsfromconfigandapiservershouldbeadequate#Addyourown!KUBE_CONTROLLER_MANAGER_ARGS=""
启动Master上的三个服务
systemctlstartkube-apiserversystemctlstartkube-controller-managersystemctlstartkube-schedulersystemctlenablekube-apiserversystemctlenablekube-controller-managersystemctlenablekube-scheduler
6、kubernetesnode安装部署修改节点config配置文件
[root@k8s1~]#vi/etc/kubernetes/config####kubernetessystemconfig##Thefollowingvaluesareusedtoconfigurevariousaspectsofall#kubernetesservices,including##kube-apiserver.service#kube-controller-manager.service#kube-scheduler.service#kubelet.service#kube-proxy.service#loggingtostderrmeanswegetitinthesystemdjournalKUBE_LOGTOSTDERR="--logtostderr=true"#journalmessagelevel,0isdebugKUBE_LOG_LEVEL="--v=0"#ShouldthisclusterbeallowedtorunprivilegeddockercontainersKUBE_ALLOW_PRIV="--allow-privileged=false"#Howthecontroller-manager,scheduler,andproxyfindtheapiserverKUBE_MASTER="--master=http://192.168.10.147:8080"~
修改kubelet配置
[root@k8s1~]#vi/etc/kubernetes/kubelet####kuberneteskubelet(minion)config#Theaddressfortheinfoservertoserveon(setto0.0.0.0or""forallinterfaces)KUBELET_ADDRESS="--address=127.0.0.1"#Theportfortheinfoservertoserveon#KUBELET_PORT="--port=10250"#YoumayleavethisblanktousetheactualhostnameKUBELET_HOSTNAME="--hostname-override=192.168.10.148"#locationoftheapi-serverKUBELET_API_SERVER="--api-servers=http://192.168.10.147:8080"#podinfrastructurecontainerKUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"#Addyourown!KUBELET_ARGS=""
分别启动kubernetesnode服务
systemctlstartkubeletsystemctlstartkube-proxysystemctlenablekubeletsystemctlenablekube-proxy

网络配置

这里网络部分是以插件的形式配置在kubernetes集群中,这里选用flannel。1、安装flannel上述步骤已经在node上安装yuminstallflannel-y2、配置flannel
[root@k8s1~]#vi/etc/sysconfig/flanneldFLANNEL_ETCD_KEY="/atomic.io#Flanneldconfigurationoptions#etcdurllocation.PointthistotheserverwhereetcdrunsFLANNEL_ETCD="http://192.168.10.147:2379"#etcdconfigkey.Thisistheconfigurationkeythatflannelqueries#ForaddressrangeassignmentFLANNEL_ETCD_KEY="/coreos.com/network"#Anyadditionaloptionsthatyouwanttopass#FLANNEL_OPTIONS=""
3、为flannel创建分配的网络
#只在master上etcd执行etcdctlmk/coreos.com/network/config'{"Network":"10.1.0.0/16"}'#若要重新建,先删除etcdctlrm/coreos.com/network/--recursive
重置docker0网桥的配置删除docker启动时默认创建的docker0网桥,flannel启动时会获取到一个网络地址,并且配置docker0的IP地址,作为该网络的网关地址,如果此时docker0上配置有IP地址,那么flannel将会启动失败。
iplinkdeldocker0

检查

在master上执行下面,检查kubernetes的状态
[root@k8s1~]#kubectlgetnodesNAMESTATUSAGE192.168.10.148Ready3h192.168.10.149Ready3h
在master上执行下面,检查etcd的状态
[root@k8s1~]#etcdctlmemberlist35300bfb5308e02c:name=etcd1peerURLs=http://192.168.10.147:2380clientURLs=http://192.168.10.147:2379776c306b60e6f972:name=etcd3peerURLs=http://192.168.10.149:2380clientURLs=http://192.168.10.149:2379a40f86f061be3fbe:name=etcd2peerURLs=http://192.168.10.148:2380clientURLs=http://192.168.10.148:2379
centos7查看日志命令:journalctl-xe或者systemctlstatusflanneld.serviceflanneld对应改成你的项目
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐
章节导航