使用kubeadm部署kubernetes集群实践
kubenrnetes版本1.10.3
操作系统版本centos7.4,之前有个博文说了centos7.2内核版本太低,当时采用升级内核的形式,但是实在太麻烦,于是重装系统,采用centos7.4。
另外,docker安装就不在这里说了,可以自行安装,我是用的版本是docker-ce17.03
机器列表:
172.16.10.1 master
172.16.10.2 node01 etcd
172.16.10.3 node02 etcd
172.16.10.4 node03 etcd
说明:这次的集群master只有一个节点,不是高可用的部署架构。其实kubernets的高可用就是master的高可用,以后会介绍高可用方案。
1、环境准备
(1)修改hostname
为每一个master节点和node节点都设置唯一的hostname并注册到/etc/hosts文件中以保证hostaname能够解析为ip
以master为例,如下
[code]hostnamectl set-hostname --static master
(2)设置时钟同步
可以使用ntp或者其他时钟同步工具,保证集群各节点的时钟同步即可
2、部署etcd集群
kubernetes依赖etcd,因此需要先准备etcd集群,具体部署方式如下
(1)上传安装包etcd-v3.2.11-linux-amd64.tgz
解压安装包
[code]tar zxvf etcd-v3.2.11-linux-amd64.tgz -C /usr/local/
(2)准备service文件/usr/lib/systemd/system/etcd.service,内容如下
[code][Unit] Description=EtcdServer After=network.target After=network-online.target Wants=network-online.target [Service] Type=notify WorkingDirectory=/usr/local/etcd-v3.2.11-linux-amd64 EnvironmentFile=-/etc/etcd/etcd.conf User=root # setGOMAXPROCS to number of processors ExecStart=/usr/local/etcd-v3.2.11-linux-amd64/etcd Restart=on-failure LimitNOFILE=65536 [Install] WantedBy=multi-user.target
(3)准备配置文件
创建目录
[code]mkdir -p /etc/etcd/
编辑配置文件/etc/etcd/etcd.conf
[code]ETCD_NAME=etcd01 ETCD_DATA_DIR="/var/lib/etcd" ETCD_LISTEN_PEER_URLS="http://172.16.10.184:2380" ETCD_LISTEN_CLIENT_URLS="http://172.16.10.184:2379,http://127.0.0.1:2379" ETCD_INITIAL_ADVERTISE_PEER_URLS="http://172.16.10.184:2380" ETCD_INITIAL_CLUSTER="etcd01=http://172.16.10.184:2380,etcd02=http://172.16.10.186:2380,etcd03=http://172.16.10.188:2380" ETCD_INITIAL_CLUSTER_STATE="new" ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-00" ETCD_ADVERTISE_CLIENT_URLS="http://172.16.10.184:2379"
注意
- ETCD_NAME:该节点的名称,每个节点不能重复
- ETCD_INITIAL_CLUSTER_TOKEN:集群token,各节点都必须相同
(4)启动etcd
启动前先关闭防火墙,不然无法启动
[code]systemctl stop firewalld.service systemctl disable firewalld.service
分别启动三个节点
[code]systemctl enable etcd.service systemctl start etcd.service
查看集群状态是否健康
[code]/usr/local/etcd-v3.2.11-linux-amd64/etcdctl cluster-health
3、上传并解压并修改配置
由于镜像比较大,所以把脚本和镜像分开上传了
kubeadm脚本,不含镜像:https://pan.baidu.com/s/1vMhrCywqLf5o4XbhDvTH_w 密码:c69j
镜像,直接放到脚本的image目录即可(tar包不需要解压):https://pan.baidu.com/s/1CZXFh8AmEhzZuLKc_1lnnQ 密码:u1gd
解压后首先看一下目录结构
[code][root@k8s-master kube1.10.3]# tree . ├── bin │ ├── kubeadm │ ├── kubectl │ └── kubelet ├── conf │ ├── 10-kubeadm.conf │ ├── dashboard │ │ ├── dashboard-admin.yaml-bak │ │ ├── dashboard-dp.yaml │ │ └── kubernetes-dashboard.yaml-bak │ ├── heapster │ │ ├── grafana.yaml │ │ ├── heapster.yaml │ │ ├── influxdb.yaml │ │ └── rbac │ │ └── heapster-rbac.yaml │ ├── kubeadm.yaml │ ├── kubelet.service │ ├── net │ └── calico.yaml │ ├── images │ └── images.tar └── shell ├── init.sh └── master.sh 9 directories, 17 files
挨个说明一下:
(1)bin目录下是kubeadm、kubectl和kubelet三个可执行文件
(2)config目录下内容较多
- 10-kubeadm.conf,kubelet的配置文件模板,不需要修改,因为在后续的初始化脚本中会修改这配置文件的内容
- kubeadm.yaml,kubeadm配置文件,内容如下
[code]apiVersion: kubeadm.k8s.io/v1alpha1 kind: MasterConfiguration etcd: endpoints: - http://172.16.10.2:2379 - http://172.16.10.3:2379 - http://172.16.10.4:2379 networking: podSubnet: 192.1.0.0/16 kubernetesVersion: v1.10.3 api: advertiseAddress: "172.16.10.1" token: "b99a00.a144ef80536d4344" tokenTTL: "0s" apiServerCertSANs: - k8s-master - k8s-node01 - k8s-node02 - k8s-node03 - 172.16.10.1 - 172.16.10.2 - 172.16.10.3 - 172.16.10.4 featureGates: CoreDNS: true
各个配置项都不言而喻,可根据自己环境进行修改
- kubelet.service,kubelet服务注册文件,不需要修改
- dashboard/和heapster/两个文件夹下的文件不需要修改
- net的calico.yaml是calico的配置文件,如果不打算自定义clusterIp的范围的话(缺省为10.96.0.0/12)这个文件也不需要修改
- image/下的image.tar是kubernetes所有组件以及用到的一些插件的镜像文件
- shell/是安装kubernetes需要的脚本,重点说明
(1)init.sh初始化脚本,master和node节点都需要执行,主要进行以下几项初始化操作
- net.bridge.bridge-nf-call-ip6tables = 1,net.bridge.bridge-nf-call-iptables = 1,允许iptables的forward规则对bridge的数据包进行过滤
- net.ipv4.ip_forward=1,打开ip转发功能,所谓转发即当主机拥有多于一块的网卡时,其中一块收到数据包,根据数据包的目的ip地址将数据包发往本机另一块网卡,该网卡根据路由表继续发送数据包
- 关闭firewalld防火墙并禁止开机自启动
- 关闭防火墙
- 关闭selinux
- 加载镜像
- 拷贝二进制文件
- 拷贝配置文件
- 初始化kublet配置文件10-kubeadm.conf,注意如果使用默认的custerIpDidr的话,此处不需要修改,如果自定义custerIpDidr需要修改KUBELET_DNS_ARGS=--cluster-dns为你自定义的一个clusterIp
- 设置docker和kubelet开机自启动
(2)master.sh,只有master节点需要执行
执行kumeadm init,配置kubectl,添加calico等插件
4、执行脚本
- init.sh,master和node节点都执行
- master.sh,只在master节点执行,执行完之后会输出一串“kubeadm join xxxxx”
- 拷贝第2步的脚本到各个node节点执行即可
如果第2步的脚本忘了,可以通过在master节点上执行重新获取
[code]kubeadm token create --print-join-command
5、登录dashboard
使用火狐浏览器访问任意nodeIP:30000
使用如下命令获取最高权限的token
[code] kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')
6、回退步骤
如果安装出现问题需要清理环境,按照下面的步骤
- master节点,执行kubeadm reset,然后清空calico使用的etcd的dataDir,rm -rf /var/etcd/*
- node节点,关闭kubelet,执行systemctl stop kubelet.service;然后删除所有docker容器,执行docker rm -f $(docker ps -qa);最后删除配置文件和证书,执行rm -rf /etc/kubernetes/*
- 清空etcd数据,先关闭所有的etcd节点,然后清空/var/lib/etcd/*,最后重启etcd集群
- 使用Kubeadm在CentOS7.2上部署Kubernetes集群
- Docker集群管理工具-Kubernetes1.10.6(k8s)四节点集群使用kubeadm部署流程(一)
- 使用Kubeadm部署 Kubernetes 集群
- 使用Kubeadm在CentOS7.2上部署Kubernetes集群的方法
- 干货|使用kubeadm部署kubernetes集群
- 使用kubeadm部署kubernetes集群
- 使用Rancher的RKE快速部署Kubernetes集群
- Kubernetes(二) - 使用Rancher部署K8S集群(搭建Rancher)
- 使用kubeadm部署kubernetes
- 使用kubeadm部署k8s集群02-配置etcd高可用
- 使用acs-engine在Azure中国区部署kubernetes集群详解
- 使用kubeadm部署k8s集群00-缓存rpm包
- 使用kubeadm部署k8s集群03-扩容kube-apiserver到3节点
- 使用kubeadm将Kubernetes集群从1.6版本升级到1.7
- 使用Rancher的RKE快速部署Kubernetes集群
- 再探使用kubeadm部署高可用的k8s集群-01引言
- 使用kubeadm安装kubernetes集群
- 使用kubeadm部署k8s集群04-配置kubelet访问kube-apiserver
- 使用脚本部署kubernetes集群
- Kubernetes(三) - 使用Rancher部署K8S集群(搭建Kubernetes)