设为首页 收藏本站
查看: 2543|回复: 1

[经验分享] CentOS7.0上部署kubernetes集群

[复制链接]
累计签到:19 天
连续签到:1 天
发表于 2017-1-3 18:27:46 | 显示全部楼层 |阅读模式
CentOS7.0上部署kubernetes集群

一. 部署环境及架构
  • 操作系统:centos 7.0
  • flannel: 0.5.5
  • Kubernetes: 1.3.0
  • Etcd版本: 2.3.7
  • Docker版本: 1.10.3
  • 集群信息:(此测试master和node1在同一个服务器)
RoleHostnameIP Address
Mastermaster192.168.99.119
Nodenode1192.168.99.119
Nodenode2192.168.99.109
master包含kube-apiserver kube-scheduler kube-controller-manager etcd四个组件
node包含kube-proxy和kubelet两个组件
1. kube-apiserver:位于master节点,接受用户请求。
2. kube-scheduler:位于master节点,负责资源调度,即pod建在哪个node节点。
3. kube-controller-manager:位于master节点,包含ReplicationManager,Endpointscontroller,Namespacecontroller,and Nodecontroller等。
4. etcd:分布式键值存储系统,共享整个集群的资源对象信息。
5. kubelet:位于node节点,负责维护在特定主机上运行的pod。
6. kube-proxy:位于node节点,它起的作用是一个服务代理的角色。

二 、安装步骤
准备工作
关闭防火墙
为了避免和Docker的iptables产生冲突,我们需要关闭node上的防火墙:
1
2
$ systemctl stop firewalld
$ systemctl disable firewalld

安装NTP(详细配置不做赘述)
为了让各个服务器的时间保持一致,还需要为所有的服务器安装NTP:
1
2
3
$ yum -y install ntp
$ systemctl start ntpd
$ systemctl enable ntpd

在192.168.99.109上部署docker本地仓库(不赘述)。

部署Master(192.168.99.119)
安装etcd和kubernetes
1$ yum -y install etcd kubernetes

配置etcd
修改etcd的配置文件/etc/etcd/etcd.conf
1
2
3
ETCD_NAME=default
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"

配置etcd中的网络
定义etcd中的网络配置,nodeN中的flannel service会拉取此配置
1$ etcdctl mk /coreos.com/network/config '{"Network":"172.17.0.0/16"}'


配置Kubernetes API server
[iyunv@node1 ~]# cat  /etc/kubernetes/apiserver
KUBE_API_ADDRESS="--address=0.0.0.0"
KUBE_API_PORT="--port=8080"
KUBELET_PORT="--kubelet-port=10250"
KUBE_ETCD_SERVERS="--etcd-servers=http://192.168.99.119:2379"
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"
KUBE_API_ARGS=""
这里需要注意原来KUBE_ADMISSION_CONTROL默认包含的ServiceAccount要删掉,不然启动API server的时候会报错。
启动服务
接下来,在Master上启动下面的服务:
1
2
3
4
5
$for SERVICES in etcd kube-apiserver kube-controller-manager kube-scheduler; do
systemctl restart $SERVICES
systemctl enable $SERVICES
systemctl status $SERVICES
done

部署Node
安装Kubernetes和Flannel
1$ yum -y install flannel kubernetes

配置Flannel
修改Flannel的配置文件/etc/sysconfig/flanneld:
1
2
3
[iyunv@node1 ~]# cat /etc/sysconfig/flanneld
# Flanneld configuration options
# etcd url location. Point this to the server where etcd runs
FLANNEL_ETCD_ENDPOINTS="http://192.168.99.119:2379"
# etcd config key. This is the configuration key that flannel queries
# For address range assignment
FLANNEL_ETCD_PREFIX="/coreos.com/network"
# Any additional options that you want to pass
#FLANNEL_OPTIONS=""
FLANNEL_OPTIONS="--iface=ens3"

这里需要注意FLANNEL_OPTIONS中的iface的值是你自己服务器的网卡,不同的服务器以及配置下和我的是不一样的。FLANNEL_ETCD_PREFIX="/coreos.com/network" 此值
与         [iyunv@node1 ~]# etcdctl ls   /coreos.com/  
/coreos.com/network 一致

启动Flannel
1
2
3
$systemctl restart flanneld
$systemctl enable flanneld
$systemctl status flanneld

上传网络配置
在当前目录下创建一个config.json,内容如下:
1
2
3
4
5
6
7
8
{
"Network": "172.17.0.0/16",
"SubnetLen": 24,
"Backend": {
"Type": "vxlan",
"VNI": 7890
}
}

然后将配置上传到etcd服务器上:
1$ curl -L http://192.168.99.119:2379/v2/keys/coreos.com/network/config -XPUT --data-urlencode value@config.json

修改Kubernetes配置
修改kubernetes默认的配置文件/etc/kubernetes/config:
1KUBE_MASTER="--master=http://192.168.99.119:8080"

修改kubelet配置
修改kubelet服务的配置文件/etc/kubernetes/kubelet:
1
2
3
4
5
6
KUBELET_ADDRESS="--address=0.0.0.0"
KUBELET_PORT="--port=10250"
# change the hostname to minion IP address
KUBELET_HOSTNAME="--hostname_override=node1"
KUBELET_API_SERVER="--api_servers=http://192.168.99.119:8080"
KUBELET_ARGS=""

不同node节点只需要更改KUBELET_HOSTNAME 为node的hostname即可。
注意:本机的hostname值: 如果没有设置,kubectl get nodes查询不到node节点。
hostnamectl -set-hostname node1(节点名称)

启动node服务
1
2
3
4
5
$ for SERVICES in kube-proxy kubelet docker; do
systemctl restart $SERVICES
systemctl enable $SERVICES
systemctl status $SERVICES
done

创建快照,其他节点用快照安装(修改相应的hostname以及KUBELET_HOSTNAME即可)
查看集群nodes
部署完成之后,可以kubectl命令在各个节点查看整个集群的状态:
kubectl -s "http://192.168.99.119:8080" get nodes
[iyunv@node1 ~]# kubectl -s "http://192.168.99.119:8080" get nodes
NAME      STATUS    AGE
node1     Ready     6d
node2     Ready     6d

注意:
/etc/hosts下hostname的配置
node1192.168.99.119
node2192.168.99.109


获取namespace名称为非default的pod,service等
kubectl get pods,services --namespace=kube-system

1、tomcat集群配置:
[iyunv@node1 tomcat]# cat  tomcat-rc.yaml
apiVersion: v1
kind: ReplicationController
metadata:
  name: tomcat-controller
spec:
  replicas: 2
  selector:
    name: tomcat
  template:
    metadata:
      labels:
        name: tomcat
    spec:
      containers:
      - name: tomcat
        image: 192.168.99.109:5000/tomcat7-java8
        ports:
          - containerPort: 8080
            hostPort: 8090  #容器映射到服务器端口
        volumeMounts:
        - mountPath: /usr/local/tomcat/webapps #容器内路径
          name: nginx-www #挂载名称需要一致
      volumes:
      - hostPath:
          path: /data/tomcat  #容器外路径
        name: nginx-www
#挂载
[iyunv@node1 tomcat]# cat  tomcat-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: tomcat-service-nodeport
spec:
  ports:
    - port: 9000
      targetPort: 8090
      protocol: TCP
  type: NodePort
  selector:
    name: tomcat

2、mysql主从配置脚本:
[iyunv@node1 mysql_r]# cat  mysql-master-controller.yaml
apiVersion: v1
kind: ReplicationController
metadata:
  name: mysql-master
  labels:
    name: mysql-master
spec:
  replicas: 1
  selector:
    name: mysql-master
  template:
    metadata:
      labels:
        name: mysql-master
    spec:
      containers:
      - name: mysql-master
        image: 192.168.99.109:5000/mysql-master
        ports:
        - containerPort: 3306
          hostPort: 3306
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: "123456"
        - name: MYSQL_REPLICATION_USER
          value: "repl"
        - name: MYSQL_REPLICATION_PASSWORD
          value: "123456"
[iyunv@node1 mysql_r]# cat  mysql-master-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: mysql-master
  labels:
    name: mysql-master
spec:
  ports:
# the port that this service should serve on
  - port: 3306
    targetPort: 3306
  selector:
    name: mysql-master

[iyunv@node1 mysql_r]# cat  mysql-slave-controller.yaml
apiVersion: v1
kind: ReplicationController
metadata:
  name: mysql-slave
  labels:
    name: mysql-slave
spec:
  replicas: 1
  selector:
    name: mysql-slave
  template:
    metadata:
      labels:
        name: mysql-slave
    spec:
      containers:
      - name: mysql-slave
        image: 192.168.99.109:5000/mysql-slave
        ports:
        - containerPort: 3306
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: "123456"
        - name: MYSQL_REPLICATION_USER
          value: "repl"
        - name: MYSQL_REPLICATION_PASSWORD
          value: "123456"
[iyunv@node1 mysql_r]# cat  mysql-slave-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: mysql-slave
  labels:
    name: mysql-slave
spec:
  ports:
  - port: 3306
  selector:
    name: mysql-slave



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-323352-1-1.html 上篇帖子: Kubernetes 1.4 震撼发布: 任何地方,轻松部署 下篇帖子: kubernetes1.5.1集群安装部署指南之基础组件安装篇
累计签到:26 天
连续签到:1 天
发表于 2017-1-13 22:48:35 | 显示全部楼层
写的蛮细致的。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表