#一、环境介绍
host | ip |
---|---|
master1 | 10.0.0.5 |
master2 | 10.0.0.2 |
master3 | 10.0.0.17 |
node1 | 10.0.0.4 |
node2 | 10.0.0.9 |
slb负载均衡 | 10.0.0.16 |
注意:
1.最好选择172网段作为物理机网段
2.(我这里是为了了解原理,在云上自己搭建才使用slb。本地建议keepalived,阿里云建议容器云服务)
前提
1.基于主机名通信:/etc/hosts或者DNS
2.时间同步
3.关闭firewalld和iptables.service
docker version | kubernetes version |
---|---|
17.03.2 | 1.11 |
可以在这里选择kubernetes的版本
https://github.com/kubernetes/kubernetes/releases
#二、原理介绍
1.组件组成
service|master1|master2|master3|node1|node2
:-: | :-: |:-:
etcd|√|√|√||
API Server|√|√|√||
Scheduler|√|√|√||
Controller-Manager|√|√|√||
kube-proxy||||√|√
docker|√|√|√|√|√|
kubelet|√|√|√|√|√|
flannel|√|√|√|√|√|
#三、kubernetes安装
##1.基础配置
在集群所有节点配置时间同步
echo '* * * * * ntpdate ntp.aliyun.com' >> /var/spool/cron/root
关闭防火墙和selinux
# systemctl stop firewalld && systemctl disable firewalld
# setenforce 0
# vim /etc/selinux/config
SELINUX=disabled
禁用swap
swapoff -a && sysctl -w vm.swappiness=0
sed '/swap/d' -i /etc/fstab
##2.安装kubelet
(1)安装docker
a.Ansible-playbook一键安装docker
b.允许docker开机启动
[root@master1 ansible_playbooks]# systemctl enable docker.service
c.docker会需要到镜像仓库下载文件,由于墙的原因会导致无法下载。需要做如下配置,在kubernetes启动成功后就可以去除:
[root@master1 ~]# vim /usr/lib/systemd/system/docker.service
Environment="HTTPS_PROXY=http://www.ik8s.io:10080" #在访问https服务时,通过此代理访问
Environment="NO_PROXY=127.0.0.0/8,10.0.0.0/24" #指定这些网段不走代理
[root@master1 ansible_playbooks]# systemctl daemon-reload
[root@master1 ansible_playbooks]# systemctl restart docker
[root@master1 ansible_playbooks]# docker info #确认出现以下信息
Https Proxy: http://www.ik8s.io:10080
No Proxy: 127.0.0.0/8,10.0.0.0/24
(2)安装kubernetes
[root@master1 ~]# vim /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes Repo
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
enable=1
#推送文件到所有节点
[root@master1 ~]ansible kubernetes -m synchronize -a "src=/etc/yum.repos.d/kubernetes.repo dest=/etc/yum.repos.d/"
#
[[root@master1 ~]# yum repolist
#在所有节点安装kubelet kubeadm kubectl
[root@master1 ~]# ansible kubernetes -m shell -a "yum install -y kubelet kubeadm kubectl"
(3)开启配置
[root@master1 ansible_playbooks]# cat /proc/sys/net/bridge/bridge-nf-call-ip6tables
1
[root@master1 ansible_playbooks]# cat /proc/sys/net/bridge/bridge-nf-call-iptables
1
设置kubelet开机自启
[root@master1 ansible_playbooks]# systemctl enable kubelet.service
修改配置
vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=cgroupfs" #增加此行
[root@master1 ansible_playbooks]# kubeadm init --kubernetes-version=v1.11.1 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --apiserver-advertise-address=10.0.0.16
--apiserver-advertise-address #apiserver将广告其正在监听的IP地址,默认0.0.0.0,即本机所有kube地址
--apiserver-bind-port #apiserver监听的端口,默认6443。
--ignore-preflight-errors #在预检查的时候可以忽略指定错误
--kubernetes-version #指定kubernetes版本
--pod-network-cidr #pod所使用的网络
--service-cidr #serivice所使用的网络
注意:如果启动过程中报错开启了swap空间,可以选择以下两种方案
a.关闭系统swap
b.如果无法关闭swap,那么设置忽略swap
[root@master1 ~]# vim /etc/sysconfig/kubelet #这两个参数一定要同时存在或者同时不存在
KUBELET_EXTRA_ARGS="--fail-swap-on=flsae"
在启动参数后加上 --ignore-preflight-errors=Swap
#四、高可用配置
1.云服务商的负载均衡,基于阿里云的SLB或者腾讯云的LB
高可用部署依赖于阿里云SLB为kubernetes apiserver提供负载均衡能力,因此您需要先手动创建一个阿里云SLB,类型为intranet,监听端口6443,后端端口也是6443,后端server backend为您的3个master节点。
这里我使用腾讯云,LB的地址为10.0.0.16
2.自建keepalived
(1)在3台master节点安装安装keepalived
ansible master -m shell -a "yum install -y keepalived"
在3台master修改配置文件
[root@master1 ~]# vim /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 520 #<--如果同一個網段有其他的keepalived 不能跟他同一個id
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.3.19 #<-----VIP IP
}
}
virtual_server 10.0.0.254 80 {
delay_loop 6
lb_algo loadbalance
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 0
protocol TCP
real_server 10.0.0.5 80 {
weight 1
TCP_CHECK {
connect_timeout 3
}
}
real_server 10.0.0.2 80 {
weight 1
TCP_CHECK {
connect_timeout 3
}
}
real_server 10.0.0.17 80 {
weight 1
TCP_CHECK {
connect_timeout 3
}
}
}
[root@master1 ~]# systemctl start keepalived
[root@master1 ~]# systemctl enable keepalived
#五、服务测试
安装配置步骤:
1.etcd cluster 仅master节点
2.flanner,集群所有节点
3.配置k8s的master:
kubernetes-master
启动的服务:
kube-apiserver,kube-scheduler,lube-controller-manager
4.配置k8s的各Node节点
kubernetes-node
先设定docker服务
启动的k8s服务kube-proxy kubelet
kubeadm
最新的教程看这里:
http://wiki.51centos.com/pages/viewpage.action?pageId=11633737