基于 CentOS7 的 Kubernetes 集群
一、环境
相关主机
- master
- 192.168.12.197
- minion
- 192.168.12.198~232
- etcd
- 192.168.12.233~236
相关软件
- OS
- CentOS 7
- 软件版本:
- kubernetes-0.19.3
- etcd-2.0.9-2.el7.x86_64
- docker-1.6.0-11.0.1.el7.centos.x86_64
- flannel-0.2.0-7.el7.x86_64
二、部署和配置
2.1 Prerequisites
systemctl stop firewalld
systemctl disable firewalld
yum -y install ntp
systemctl start ntpd
systemctl enable ntpd
2.2 etcd Cluster
etcd 官方文档 Clustering Guide 定义集群有三种方式,本示例采用 Static 方法。
yum install etcd -y
- paas-ci-etcd1
- 192.168.12.233
- paas-ci-etcd2
- 192.168.12.234
- paas-ci-etcd3
- 192.168.12.235
- paas-ci-etcd4
- 192.168.12.236
这里以 192.168.12.234 为例,配置文件修改如下:
# grep -vE '^$|^#' /etc/etcd/etcd.conf
ETCD_NAME=paas-ci-etcd2 # 不同的 etcd 主机定义不同的 NAME
ETCD_DATA_DIR="/var/lib/etcd/paas-ci-etcd2.etcd" # 定义 etcd 存储的数据目录
ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380" # 定义 peer 绑定端口,即内部集群通信端口
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:4001" # 定义 client 绑定端口,即 client 访问通信端口
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.12.234:2380" # 定义 etcd peer 初始化广播端口
ETCD_INITIAL_CLUSTER="paas-ci-etcd1=http://192.168.12.233:2380,paas-ci-etcd2=http://192.168.12.234:2380,paas-ci-etcd3=http://192.168.12.235:2380,paas-ci-etcd4=http://192.168.12.236:2380"
# ETCD_INITIAL_CLUSTER 定义集群成员
ETCD_INITIAL_CLUSTER_STATE="new" # 初始化状态使用 new,建立之后改此值为 existing
ETCD_INITIAL_CLUSTER_TOKEN="dev-etcd-cluster" # etcd 集群名
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.12.234:4001"
# 定义 client 广播端口,此处必须填写相应主机的 IP,不能填写 0.0.0.0,否则 etcd client 获取不了 etcd cluster 中的主机
配置完成之后,启动各主机 etcd
systemctl enable etcd
systemctl start etcd
查看当前集群成员
# etcdctl member list
a340818d006c60f: name=paas-ci-etcd1 peerURLs=http://192.168.12.233:2380 clientURLs=http://0.0.0.0:4001
3045ba54dbc291dd: name=paas-ci-etcd4 peerURLs=http://192.168.12.236:2380 clientURLs=http://0.0.0.0:4001
75b057b0086f534b: name=paas-ci-etcd2 peerURLs=http://192.168.12.234:2380 clientURLs=http://0.0.0.0:4001
84562a66304940a1: name=paas-ci-etcd3 peerURLs=http://192.168.12.235:2380 clientURLs=http://0.0.0.0:4001
配置 flannel 通信网段
# etcdctl mk /coreos.com/network/config '{"Network":"172.17.0.0/16"}'
# etcdctl get /coreos.com/network/config
{"Network":"172.17.0.0/16"}
2.3 K8s Master 安装配置
yum -y install kubernetes
注: CentOS7 源中最新版本是 0.15,如果需要使用最新的,替换 /usr/bin 下 K8s 的二进制文件即可。
Master 配置文件修改
$ grep -vE '^$|^#' /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.12.233:4001,http://192.168.12.234:4001,http://192.168.12.235:4001,http://192.168.12.236:4001"
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
KUBE_ADMISSION_CONTROL="--admission_control=NamespaceAutoProvision,LimitRanger,ResourceQuota"
KUBE_API_ARGS=""
启动相关服务
for SERVICES in kube-apiserver kube-controller-manager kube-scheduler; do
systemctl restart $SERVICES
systemctl enable $SERVICES
systemctl status $SERVICES
done
2.4 K8s Minions 安装配置
yum -y install kubernetes docker flannel bridge-utils
Minion 配置文件修改
# grep -vE '^$|^#' /etc/kubernetes/config
KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=0"
KUBE_ALLOW_PRIV="--allow_privileged=false"
KUBE_MASTER="--master=http://192.168.12.197:8080" # 指定 master 主机 IP
# grep -vE '^$|^#' /etc/kubernetes/kubelet
KUBELET_ADDRESS="--address=0.0.0.0"
KUBELET_PORT="--port=10250"
KUBELET_HOSTNAME="--hostname_override=192.168.12.198" # 根据实际的 minion 对于 hostname 或者 IP 修改
KUBELET_API_SERVER="--api_servers=http://192.168.12.197:8080" # 指定 master 主机 IP
KUBELET_ARGS="--pod-infra-container-image=your_regestry_url:5000/google_containers/pause:0.8.0" # 指定私有 registry pull pause image
注: pause:0.8.0 因为 Google 被 GFW 屏蔽,所以该镜像需要翻墙下载,下载不了的可以联系我^_^
# grep "FLANNEL_ETCD=" /etc/sysconfig/flanneld
FLANNEL_ETCD="http://192.168.12.233:4001,http://192.168.12.234:4001,http://192.168.12.235:4001,http://192.168.12.236:4001"
# cat /usr/lib/systemd/system/kubelet.service
... ...
[Service]
WorkingDirectory=/var/lib/kubelet
EnvironmentFile=-/etc/kubernetes/config
EnvironmentFile=-/etc/kubernetes/kubelet
ExecStart=/usr/bin/kubelet \
$KUBE_LOGTOSTDERR \
$KUBE_LOG_LEVEL \
$KUBELET_API_SERVER \
$KUBELET_ADDRESS \
$KUBELET_PORT \
$KUBELET_HOSTNAME \
$KUBE_ALLOW_PRIV \
$KUBELET_ARGS
LimitNOFILE=65535 # 设置 limit 限制
LimitNPROC=10240
Restart=on-failure
... ...
注: docker、kube-proxy 这些默认已经设置好相应的 limit,无需再次修改
启动相关服务
systemctl daemon-reload
for SERVICES in kube-proxy kubelet flanneld docker; do
systemctl restart $SERVICES
systemctl enable $SERVICES
systemctl status $SERVICES
done
如果出现 docker0 和 flannel 设置的 IP 地址不同,则可以采取如下方式修改:
systemctl stop docker
ifconfig docker0 down
brctl delbr docker0
systemctl start docker
三、集群状态
3.1 K8s Master
设置对于 nodes 的 label [目前环境有 dev 和 fat 两种]
kubectl label nodes 192.168.12.198 usetype=dev
关于 nodes label 具体可参考 Node selection example
# kubectl get nodes
NAME LABELS STATUS
192.168.12.198 kubernetes.io/hostname=192.168.12.198,usetype=dev Ready
192.168.12.199 kubernetes.io/hostname=192.168.12.199,usetype=dev Ready
192.168.12.200 kubernetes.io/hostname=192.168.12.200,usetype=dev Ready
192.168.12.201 kubernetes.io/hostname=192.168.12.201,usetype=fat Ready
192.168.12.202 kubernetes.io/hostname=192.168.12.202,usetype=fat Ready
192.168.12.203 kubernetes.io/hostname=192.168.12.203,usetype=fat Ready
... ...
3.2 etcd 集群
# etcdctl --peers 192.168.12.235:4001 member list
a340818d006c60f: name=paas-ci-etcd1 peerURLs=http://192.168.12.233:2380 clientURLs=http://0.0.0.0:4001
3045ba54dbc291dd: name=paas-ci-etcd4 peerURLs=http://192.168.12.236:2380 clientURLs=http://0.0.0.0:4001
75b057b0086f534b: name=paas-ci-etcd2 peerURLs=http://192.168.12.234:2380 clientURLs=http://0.0.0.0:4001
84562a66304940a1: name=paas-ci-etcd3 peerURLs=http://192.168.12.235:2380 clientURLs=http://0.0.0.0:4001
3.3 Other
其它可以测试 pods、rc、service,这里不作介绍了,官方 github 上有相应的对应实例,0.19.3 直接使用 V1 的接口即可。
四、参考
- flannel
- etcd Clustering Guide
- Node selection example
- Getting started on CentOS
- Creating a Kubernetes Cluster to Run Docker Formatted Container Images
- Installing Kubernetes Cluster with 3 minions on CentOS 7 to manage pods and services
–EOF–
基于 CentOS7 的 Kubernetes 集群的更多相关文章
- [Kubernetes]CentOS7部署Kubernetes集群
环境介绍及安装前准备 三台机器,用于部署k8s的运行环境: 节点 ip Master 192.168.243.138 Node1 192.168.243.139 Node2 192.168.243.1 ...
- Centos7部署Kubernetes集群
目录贴:Kubernetes学习系列 1.环境介绍及准备: 1.1 物理机操作系统 物理机操作系统采用Centos7.3 64位,细节如下. [root@localhost ~]# uname -a ...
- Centos7部署Kubernetes集群(单工作节点)+配置dashboard可视化UI
目标:docker+kubernetes+cadvosor+dashboard 一:物理硬件 两台虚拟机(centos7):一台做为主节点(master),一台做为工作节点(node) [root@M ...
- 基于minikube的kubernetes集群部署及Vitess最佳实践
简介 minikube是一个可以很容易在本地运行Kubernetes集群的工具, minikube在电脑上的虚拟机内运行单节点Kubernetes集群,可以很方便的供Kubernetes日常开发使用: ...
- Springboot 1.5.x 集成基于Centos7的RabbitMQ集群安装及配置
RabbitMQ简介 RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件). RabbitMQ是一套开源(MPL)的消息队列服务软件,是由LShift提供的一 ...
- Centos7手工安装Kubernetes集群
安装Kubernetes集群有多种方式,前面介绍了Kubeadm的方式,本文将介绍手工安装的方法. 安装环境有3台Azure上的VM: Hkube01:10.0.1.4 Hkube02:10.0.1. ...
- Springboot 2.0.x 集成基于Centos7的Redis集群安装及配置
Redis简介 Redis是一个基于C语言开发的开源(BSD许可),开源高性能的高级内存数据结构存储,用作数据库.缓存和消息代理.它支持数据结构,如 字符串.散列.列表.集合,带有范围查询的排序集,位 ...
- Centos7部署kubernetes集群CA证书创建和分发(二)
1.解压软件包 [root@linux-node1 ~]# cd /usr/local/src/ [root@linux-node1 src]# ls k8s-v1.10.1-manual.zip [ ...
- kubectl-trace 基于bpftrace 的kubernetes 集群性能分析工具
kubectl-trace 是一个kubectl 的插件,我们可以使用基于bpftrace 的编程能力,来分析系统的性能问题, 强大,灵活,后边安装试用下 参考架构 参考资料 https://gith ...
随机推荐
- 日常开发中常见的HTTP协议的状态码
301Moved Permanently请求的网页已永久移动到新位置.服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将申请人转到新位置.您应使用此代码告诉 Googlebot 某个 ...
- linux中touch命令参数修改文件的时间戳(转)
linux中touch命令参数不常用,一般在使用make的时候可能会用到,用来修改文件时间戳,或者新建一个不存在的文件,以下是linux中touch命令参数的使用方法: touch [-acm][-r ...
- 推荐几款API文档集合工具
https://zealdocs.org/ 开源.免费,支持Linux.Windows http://velocity.silverlakesoftware.com/ https://kape ...
- IE6实现图片或背景的圆角效果
使用ie-css3.htc实现背景圆角效果 <!DOCTYPE html> <html> <head> <meta http-equiv="Cont ...
- Android开发(三十二)——延时
模拟延时 private class GetDataTask extends AsyncTask<Void, Void, String[]> { @Override protected S ...
- <《巴菲特之道 (第三版)》>读书笔记
以便宜的价格买入长期绩优的股票 他把对公司的投资看做是拥有公司的一部分股权,看重的是公司的长期经济价值 别人越是草率,我们越要加倍慎重 如果你发现自己已经在陷阱中,最重要的是想办法让自己不要再往下陷 ...
- 【网络编程】——connect函数遇见EINTR的处理
最近在公司项目中突然报错如下 “connect: Interrupted system call”, 经过查找代码发现是在创建 socket 中执行了 connect 函数失败导致.上网查阅资料发现这 ...
- [iOS Xcode8]上传AppStore 无法构建版本 没有➕号
最近iOS10出来了 Xcode也跟着升级到了8 想着App做个更新 于是修改好了代码打算上传新包 ,无奈总是发现构建不了新版本 经过各种蛋疼的查找.我列一下我的经验 1.如果是收费的App,那么是要 ...
- Rsync 详细配置说明
rsync是类unix系统下的数据镜像备份工具. 它的特性如下:可以镜像保存整个目录树和文件系统.可以很容易做到保持原来文件的权限.时间.软硬链接等等.无须特殊权限即可安装.快速:第一次同步时 rsy ...
- 【转】Xamarin Forms 介绍
特此声明,本篇博文转自:http://blog.csdn.net/kinfey/article/details/29621381 什么是 Xamarin Forms ? Xamarin Forms 是 ...