kubernetes 单节点 部署实践以及部署过程中的问题总结
本文参考了网上很多搭建kubernetes的文章,搭建过程中遇到了各式各样的问题,本文主要将自己搭建过程以及遇到的问题以及解决方式记录了下来,可能会有问题,欢迎大家指正,也欢迎大家互相交流。 一,环境准备 K8S 分为 master 和 slave 两类角色。 环境说明如下表: 对象 版本 IP 说明 ma...
本文参考了网上很多搭建kubernetes的文章,搭建过程中遇到了各式各样的问题,本文主要将自己搭建过程以及遇到的问题以及解决方式记录了下来,
可能会有问题,欢迎大家指正,也欢迎大家互相交流。
一,环境准备
K8S 分为 master 和 slave 两类角色。
环境说明如下表:
对象 版本 IP 说明
master centos7 10.10.10.12 K8S的master所在主机
etcd-server centos7 10.10.10.12 etcd服务所在主机,与master在同一机器
slave centos7 10.10.10.13 K8S节点所在主机(如果没有两台机器,在k8s-slave上执行的所有命令都可以在k8s-master上执行)
二,安装并配置master的K8S
1,登录 master 主机
2,跟新yum源,请保证该主机与外网连同
yum update -y
3,创建yum源
注意:master,slave都要按照以下操作创建yum源
登录master/slave主机:
进入目录 cd /etc/yum.repos.d/
vi docker.repo
加入以下内容:
[docker]
name=docker-common-release
baseurl=http://cbs.centos.org/repos/virt7-docker-common-release/x86_64/os/
gpgcheck=0
4,安装服务
执行以下命令,安装kubernetes和etcd。
yum -y install --enablerepo=docker-common-release kubernetes etcd
5,修改文件/etc/kubernetes/config(所有节点)
注意,master和slave主机都要修改
指定master主机的ip,文件内容如下:
$ cat /etc/kubernetes/config
KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=0"
KUBE_ALLOW_PRIV="--allow-privileged=false"
KUBE_MASTER="--master=http://10.10.10.12:8080"
6,禁用防火墙
systemctl disable iptables-services firewalld
systemctl stop iptables-services firewalld
在master节点配置kubernetes服务
(如果后面的访问出现8080,2379端口访问不通的情况,可以尝试允许 8080,与 2379的端口通过
8080是slave节点的k8s node的访问api的端口
2379是flancd返问etcd的端口
1,允许端口访问
iptables -I INPUT -p tcp -m multiport --dports 8080 -m comment --comment "k8s" -j ACCEPT
iptables -I INPUT -p tcp -m multiport --dports 2379 -m comment --comment "etcd" -j ACCEPT
)
7,修改配置文件/etc/etcd/etcd.conf,确保etcd监听所有地址。内容如下:
$ cat /etc/etcd/etcd.conf
ETCD_NAME=default
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
8,设置etcd网络,主要是flannel用于分别docker的网络,‘/coreos.com/network/config’ 这个字段必须与
flannel中的"FLANNEL_ETCD_KEY="/coreos.com/network" 保持一致,但是没有 '/config'字段
etcdctl set /coreos.com/network/config '{ "Network": "10.3.0.0/16" }'
9,修改配置文件/etc/kubernetes/apiserver
$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://10.10.10.12:2379"
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,ResourceQuota"
KUBE_API_ARGS=""
10,修改配置文件/etc/kubernetes/controller-manager,定义slave主机ip地址
$cat /etc/kubernetes/controller-manager
KUBELET_ADDRESSES="--machines=10.10.10.13"
11,在master主机上,启动服务
执行如下命令,批量启动服务
for SERVICES in etcd kube-apiserver kube-controller-manager kube-scheduler; do
systemctl restart $SERVICES
systemctl enable $SERVICES
systemctl status $SERVICES
done
三,slave节点配置
1,创建yum源
同2.3
2,yum 安装kubernetes
yum -y install --enablerepo=docker-common-release kubernetes flannel
3,修改kubernetes配置文件,指定master。
$ cat /etc/kubernetes/config
KUBE_MASTER="--master=http://XX.XX.XX.179:8080"
$ cat /etc/sysconfig/flanneld
FLANNEL_ETCD="http://10.10.10.12:2379"
4,配置
修改flanneld的配置文件:
$ cat /etc/sysconfig/flanneld
FLANNEL_ETCD="http://10.10.10.12:2379"
FLANNEL_ETCD_KEY="/coreos.com/network"
说明:
/coreos.com/network 与 etcd 中设置的子网要保持一致 ,就是少了一个config
否则会出现:network.go:53] Failed to retrieve network config: 104: Not a directory (/atomic.io/network) [366]
5,配置kubelet服务。
$ cat /etc/kubernetes/kubelet
KUBELET_ADDRESS="--address=0.0.0.0"
KUBELET_PORT="--port=10250"
KUBELET_HOSTNAME="--hostname-override=10.10.10.13"
KUBELET_API_SERVER="--api-servers=http://10.10.10.12:8080"
6,启动flanneld
systemctl restart flanneld
systemctl enable flanneld
7,配置docker配置文件
查看flannel的配置文件
$cat /run/flannel/docker
DOCKER_OPT_BIP="--bip=10.1.77.1/24"
DOCKER_OPT_IPMASQ="--ip-masq=true"
DOCKER_OPT_MTU="--mtu=1472"
DOCKER_NETWORK_OPTIONS=" --bip=10.1.77.1/24 --ip-masq=true --mtu=1472 "
查看dokcer的配置文件
$cat /etc/sysconfig/docker-network
# /etc/sysconfig/docker-network
DOCKER_NETWORK_OPTIONS="--bip=10.1.77.1/24 --ip-masq=true --mtu=1472"
也就是将/etc/sysconfig/docker-network 中的DOCKER_NETWORK_OPTIONS改成与 /run/flannel/docker 中的DOCKER_NETWORK_OPTIONS一致
8,在slave主机上,启动服务
for SERVICES in kube-proxy kubelet docker flanneld; do
systemctl restart $SERVICES
systemctl enable $SERVICES
systemctl status $SERVICES
done
9,在slave上执行: route -n ,可以看到如下信息
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.10.10.1 0.0.0.0 UG 100 0 0 eth0
10.1.0.0 0.0.0.0 255.255.0.0 U 0 0 0 flannel0
10.1.77.0 0.0.0.0 255.255.255.0 U 0 0 0 docker0
10.10.10.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
四,验证
现在登陆master,确认slave的状态
$ kubectl get nodes
NAME LABELS STATUS AGE
10.10.10.13 kubernetes.io/hostname=10.10.10.13 Ready 1h
五,遇到问题
1,flanneld 启动的时候,连接的etcd 为127.0.0.1
$ps -ef|grep flanneld
/usr/bin/flanneld -etcd-endpoints=http://127.0.0.1:2379 -etcd-prefix=/atomic.io/network
修改方式:
$ cat /etc/sysconfig/flanneld
FLANNEL_ETCD="http://10.10.10.12:2379"
2, flanneld 启动报:Failed to retrieve network config: client: etcd cluster is unavail...configured
修改方式:
(1)在etcd节点上设置
etcdctl set /coreos.com/network/config '{ "Network": "10.3.0.0/16" }'
(2)$ cat /etc/sysconfig/flanneld
FLANNEL_ETCD="http://10.10.10.12:2379"
FLANNEL_ETCD_KEY="/coreos.com/network"
3,flanneld 无法连上 etcd,“Failed to retrieve network config: client: etcd cluster is unavail...configured”
允许端口访问
iptables -I INPUT -p tcp -m multiport --dports 8080 -m comment --comment "k8s" -j ACCEPT
iptables -I INPUT -p tcp -m multiport --dports 2379 -m comment --comment "etcd" -j ACCEPT
iptables-save|grep 2379
service iptables save
六,参考文档:
1, http://blog.csdn.net/qingchi0/article/details/42538549
更多推荐
所有评论(0)