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)修改hostname
为每一个master节点和node节点都设置唯一的hostname并注册到/etc/hosts文件中以保证hostaname能够解析为ip
以master为例,如下
hostnamectl set-hostname --static master
(2)设置时钟同步
可以使用ntp或者其他时钟同步工具,保证集群各节点的时钟同步即可
kubernetes依赖etcd,因此需要先准备etcd集群,具体部署方式如下
(1)上传安装包etcd-v3.2.11-linux-amd64.tgz
解压安装包
tar zxvf etcd-v3.2.11-linux-amd64.tgz -C /usr/local/
(2)准备service文件/usr/lib/systemd/system/etcd.service,内容如下
[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)准备配置文件
创建目录
mkdir -p /etc/etcd/
编辑配置文件/etc/etcd/etcd.conf
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"
注意
(4)启动etcd
启动前先关闭防火墙,不然无法启动
systemctl stop firewalld.service
systemctl disable firewalld.service
分别启动三个节点
systemctl enable etcd.service
systemctl start etcd.service
查看集群状态是否健康
/usr/local/etcd-v3.2.11-linux-amd64/etcdctl cluster-health
由于镜像比较大,所以把脚本和镜像分开上传了
kubeadm脚本,不含镜像:https://pan.baidu.com/s/1vMhrCywqLf5o4XbhDvTH_w 密码:c69j
镜像,直接放到脚本的image目录即可(tar包不需要解压):https://pan.baidu.com/s/1CZXFh8AmEhzZuLKc_1lnnQ 密码:u1gd
解压后首先看一下目录结构
[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目录下内容较多
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
各个配置项都不言而喻,可根据自己环境进行修改
(1)init.sh初始化脚本,master和node节点都需要执行,主要进行以下几项初始化操作
(2)master.sh,只有master节点需要执行
执行kumeadm init,配置kubectl,添加calico等插件
如果第2步的脚本忘了,可以通过在master节点上执行重新获取
kubeadm token create --print-join-command
使用火狐浏览器访问任意nodeIP:30000
使用如下命令获取最高权限的token
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')
如果安装出现问题需要清理环境,按照下面的步骤