环境:
centos7
docker1.13.1
Kubernetes在国内简称 k8s,是谷歌开发的,是容器编排引擎(其实就是容器统一管理)
etcd | 控制数据,存储K/V的组件,可以理解为数据库 |
flannel | 控制网络,实现跨主机访问容器网络通信 |
kube-apiserver | 提供k8s集群的api调用 |
kube-controller-manager | 集群控制服务 |
kube-scheduler | 调度容器,分配到node |
kubelet | node上配置好及可添加到集群中 |
kube-proxy | node的网络代理 |
registry | 私有镜像仓库 |
最少三台主机,前三个可以在同一台主机上 (我用了5台):
192.168.0.128 k8s-master #k8s 控制器,主要控制在这台机器上
192.168.0.120 docker1 #宿主机1(宿主机在k8s上叫做nede节点)
192.168.0.121 docker2 #宿主机2
192.168.0.122 etcd #etcd 数据库
192.168.0.123 registry 私有镜像仓库
所有机器关闭centos7的两层防火墙
#禁用firewalld
systemctl stop firewalld && systemctl disable firewalld && setenforce 0
#禁用selinux 把 enforcing 改成disabled
vim /etc/selinux/config
SELINUX=disabled
#修改防火墙规则,最后添加
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
所有机器都需要安装 epel-release源
yum install epel-release -y
yum install *rhsm* -y
wget http://mirror.centos.org/centos/7/os/x86_64/Packages/python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm
rpm2cpio python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm | cpio -iv --to-stdout ./etc/rhsm/ca/redhat-uep.pem | tee /etc/rhsm/ca/redhat-uep.pem
1.安装etcd数据库
yum install etcd -y
2.编辑配置文件
#ETCD_LISTEN_CLIENT_URLS /监控本机
#ETCD_NAME /名字
#ETCD_ADVERTISE_CLIENT_URLS #其他宿主机访问的ip端口
vim /etc/etcd/etcd.conf
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379,http://0.0.0.0:4001"
ETCD_NAME="master"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.0.122:2379,http://192.168.0.122:4001"
3.启动
systemctl enable etcd
systemctl start etcd
4.验证
#添加一条数据 testkey 是键 0 是值
etcdctl set testkey 0
#查询一条数据
etcdctl get testkey
#远程查询端口
etcdctl -C http://192.168.0.122:2379 cluster-health
etcdctl -C http://192.168.0.122:4001 cluster-health
1.安装docker(k8s自带,安装了会冲突,可以不安装。从第4步开始)
yum install docker -y
2.配置
vim /etc/sysconfig/docker
#在最下面添加
#registry私有仓库地址,如果docker设置过daocloud加速器那么这个加上就会报错,不知道为什么
OPTIONS="--insecure-registry 192.168.0.123:5000"
3.设置开机自启并启动docker
#开机启动
systemctl enable docker
#启动
systemctl start docker
4.安装kubernetes
yum install kubernetes -y
master 上需要运行 kubernetes API server , kubernetes Controller Manager , kubernetes Scheduler
5.配置 api server
#进入配置文件,需要修改4个地方
#KUBE_API_ADDRESS /服务所监控的ip
#KUBE_API_PORT /端口
#KUBE_ETDE_SERVERS /etcd数据库的集群组,多个etcd用,隔开
#KUBE_ADMISSION_CONTROL /组件 ServiceAccount 只需要把这个组件删掉即可
vim /etc/kubernetes/apiserver
KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"
KUBE_API_PORT="--port=8080"
KUBE_ETCD_SERVERS="--etcd-servers=http://192.168.0.122:2379"
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,Security ContextDeny,ResourceQuota"
6.kubernetes配置
#进入config 只需要把KUBE_MASTER 这里的http后面改成master的IP即可
vim /etc/kubernetes/config
KUBE_MASTER="--master=http://192.168.0.128:8080"
7.设置开机启动
#开机启动
systemctl enable kube-apiserver
#启动
systemctl start kube-apiserver
#开机启动
systemctl enable kube-controller-manager
#启动
systemctl start kube-controller-manager
#开机启动
systemctl enable kube-scheduler
#启动
systemctl start kube-scheduler
1.所有node都一样
#1.安装docker
#2.设置开机启动
#3.安装kubernetes
配置node的kubernetes
node上kubernetes 需要运行 Kubelet , Kubernetes Proxy
2.config配置
#需要配置
#KUBE_MASTER /master的IP地址
vim /etc/kubernetes/config
KUBE_MASTER="--master=http://192.168.0.128:8080"
3.kubelet 配置
#KUBELET_ADDRESS /后面ip改成0.0.0.0 表示监控所有ip
#KUBELET_HOSTNAME /后面改成本机的ip
#KUBELET_API_SERVER /后面是 master的IP
vim /etc/kubernetes/kubelet
KUBELET_ADDRESS="--address=0.0.0.0"
KUBELET_HOSTNAME="--hostname-override=192.168.0.120"
KUBELET_API_SERVER="--api-servers=http://192.168.0.128:8080"
4.启动服务
#开机启动
systemctl enable kubelet
#启动
systemctl start kubelet
#开机启动
systemctl enable kube-proxy
#启动
systemctl start kube-proxy
5.测试
#在master 上查看node
kubectl -s http://192.168.0.128:8080 get node
# node的状态
kubectl get nodes
6.所有节点都下载pod-infrastructure镜像
docker pull registry.access.redhat.com/rhel7/pod-infrastructure
作用:管理所有节点的网络
1.所有上面均安装flannel
yum install flannel -y
2.配置
vim /etc/sysconfig/flanneld
#定义etcd数据库的地址
FLANNEL_ETCD_ENDPOINTS="http://192.168.0.122:2379"
#设置网卡,不设置无法ping通外网 em1 是内网网卡名字
FLANNEL_OPTIONS="--iface=em1"
#启动服务 #有etcd数据库的那台宿主机需要配置完 3,4步在启动服务
systemctl start flanneld
#开机自启动
systemctl enable flanneld
3.master上配置 network 并保存到etcd上面(etcd单独用主机的,用安装etcd的那台主机)
etcdctl mk /atomic.io/network/config '{"Network":"192.168.0.0/24"}'
4.当网络出现异常时,使用网络刷新(etcd单独用主机的,用安装etcd的那台主机)
etcdctl update /atomic.io/network/config '{"Network":"192.168.0.0/16"}'
5.flaneld服务启动时发生错误,说明etcd数据库没配置好
flanneld.service failed because a timeout was exceeded.
6.flannel配置完毕后ping不通大网
修改flanneld文件
vim /etc/sysconfig/flanneld
FLANNEL_OPTIONS="--iface=docker0"
保存推出后执行以下命令 docker0是docker网卡的名字,看你的网卡名字是什么就写什么
#重启服务
systemctl restart flanneld docker
#用ifconfig查看以下dockerip是否变换了,如果变了则不用执行下面的,如果没变执行以下操作
#停止docker0网卡
ip link set docker0 down
#删除docker0网卡
ip link delete docker0
#重启服务#删除后等1分钟左右再重启
systemctl restart flanneld docker
修改flanneld文件
vim /etc/sysconfig/flanneld
FLANNEL_OPTIONS="iface=docker0"
至此完成
1.在master上下载镜像
docker pull registry
2.启动镜像
#-d 后台运行 ,-p映射端口 ,--name 自个起的名字
#--privileged=true 给一个权限
#-v /home/data/registrydata:/tmp/registry 映射卷,仓库镜像会保存到这里
docker run -d -p 5000:5000 --name=registry --restart=always --privileged=true --log-driver=none -v /home/data/registrydata:/tmp/registry docker.io/registry
3.tag镜像
#192.168.0.123:5000/registry/nginx:v1 除了IP是你私有仓库的ip,其他的都随意起,最好和原镜像同名
docker tag 容器id 192.168.0.123:5000/registry/nginx:v1
4上传镜像到本地私有仓库
docker push 192.168.0.123:5000/registry/nginx:v1
5.查看私有仓库的镜像
#查看所有
curl -XGET http://192.168.0.128:5000/v2/_catalog