参考链接:1
2
3
4
5https://cloud.tencent.com/developer/article/1115558 配置基础环境
http://blog.51cto.com/hequan/2106618 搭建ha k8s
https://mritd.me/2017/07/21/set-up-kubernetes-ha-cluster-by-binary/ 部署calico网络(1) 和 ha k8s 参考
http://blog.51cto.com/newfly/2062210 部署calico网络(2)
http://m635674608.iteye.com/blog/2344151 sdn比较
一、服务器信息
- Centos7.4 系统 和 Docker version 18.06.1-ce
主机名 | IP | 备注 |
---|---|---|
k8s-master1 | 192.168.1.126 | 主集群1,etcd1,node1 |
k8s-master2 | 192.168.1.127 | 主集群2,etcd2,node2 |
k8s-master3 | 192.168.1.128 | 主集群3,etcd3,node3 |
slb | 192.168.1.129/39.105.81.231 | slb内网和外网ip地址,设置TCP监听,监听6443端口 |
Service 和 Pods ip段划分
名称 | IP段 | 备注 |
---|---|---|
service-cluster-ip | 10.10.0.0/16 | 可用地址 4094 |
pods-ip | 10.20.0.0/16 | 可用地址 4094 |
集群dns | 10.10.0.2 | 用于集群service域名解析 |
二、环境初始化
1.1 分别在3台主机设置主机名称
1 | hostnamectl set-hostname k8s-master1 |
1.2 配置主机映射 /etc/hosts/
1 | 192.168.1.126 k8s-master1 etcd1 |
1.3 master1上执行ssh免密码登陆配置
1 | ssh-keygen #一路回车即可 |
1.4 三台主机配置(基础环境)
1 | # 停防火墙 |
三、K8S部署
1 | 1、安装Docker |
1.1 安装Docker
在k8s-master1、k8s-master2、k8s-master3操作1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18mkdir /data/docker
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo yum makecache fast
sudo yum -y install docker-ce
docker version
systemctl enable docker.service
systemctl start docker.service
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://4xr1qpsp.mirror.aliyuncs.com"],"graph": "/data/docker"}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
1.2 自签TLS证书
组件 | 使用的证书 |
---|---|
etcd | ca.pem, server.pem, server-key.pem |
calico | ca.pem, server.pem, server-key.pem |
kube-apiserver | ca.pem, server.pem, server-key.pem |
kube-controller-manager | ca.pem, ca-key.pem |
kubelet | ca.pem, ca-key.pem |
kube-proxy | ca.pem, kube-proxy.pem, kube-proxy-key.pem |
kubectl | ca.pem, admin.pem, admin-key.pem |
k8s-master1 安装证书生成工具cfssl:1
2
3
4
5
6
7
8
9
10
11
12
13mkdir /data/ssl -p
wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64
chmod +x cfssl_linux-amd64 cfssljson_linux-amd64 cfssl-certinfo_linux-amd64
mv cfssl_linux-amd64 /usr/local/bin/cfssl
mv cfssljson_linux-amd64 /usr/local/bin/cfssljson
mv cfssl-certinfo_linux-amd64 /usr/bin/cfssl-certinfo
cd /data/ssl/
创建certificate.sh
1 | # vim certificate.sh |
上个脚本,根据实际情况修改如下,然后执行1
2
3
4
5
650 "192.168.1.126",
51 "192.168.1.127",
52 "192.168.1.128",
53 "10.10.0.1",
54 "192.168.1.129",
55 "39.105.81.231",
1.3 部署Etcd集群
k8s-master1机器上操作,在把执行文件copy到k8s-master2 k8s-master31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21二进制包下载地址: https://github.com/etcd-io/etcd/releases/tag/v3.3.9
3个节点
mkdir /data/etcd/
cd /data/etcd/
mkdir /opt/kubernetes/{bin,cfg,ssl} -p
tar zxvf etcd-v3.3.9-linux-amd64.tar.gz
cd etcd-v3.3.9-linux-amd64/
cp etcd etcdctl /opt/kubernetes/bin/
echo 'export PATH=$PATH:/opt/kubernetes/bin' >> /etc/profile
source /etc/profile
cd /data/ssl
cp ca*pem server*pem /opt/kubernetes/ssl/
scp -r /opt/kubernetes/* root@k8s-master2:/opt/kubernetes
scp -r /opt/kubernetes/* root@k8s-master3:/opt/kubernetes
1 | cd /data/etcd |
1 | chmod +x etcd.sh |
1.4 创建Node节点kubeconfig文件
k8s-master1节点操作
- 创建TLS Bootstrapping Token
- 创建kubelet kubeconfig
- 创建kube-proxy kubeconfig
1 | cd /data/ssl/ |
1 | ## kubectl 软件在kubernetes-server-linux-amd64.tar.gz 里面,可从官网下载,下面的部署也需要这个软件包 |
1 | scp *kubeconfig root@k8s-master2:/opt/kubernetes/cfg |
1.5 获取K8S二进制包
1 | https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.12.md # v1.12.0 |
master 需要用到
- kubectl
- kube-scheduler
- kube-apiserver
- kube-controller-manager
node 需要用到
- kubelet
- kube-proxy
1 | mkdir /data/k8s-master |
1 | vim controller-manager.sh |
1 | vim scheduler.sh |
1.6 运行Master组件
在k8s-master1 操作1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34cd /data/k8s/kubernetes/server/bin
mv kube-apiserver kube-controller-manager kube-scheduler kubectl /opt/kubernetes/bin
chmod +x /opt/kubernetes/bin/*
chmod +x *.sh
cp ssl/token.csv /opt/kubernetes/cfg/
ls /opt/kubernetes/ssl/
# 输出结果
ca-key.pem ca.pem server-key.pem server.pem
# k8s-master1 运行
./apiserver.sh 192.168.1.126 https://192.168.1.126:2379,https://192.168.1.127:2379,https://192.168.1.128:2379
./scheduler.sh 127.0.0.1
./controller-manager.sh 127.0.0.1
PS: controller-manager 配置中设置为 --horizontal-pod-autoscaler-use-rest-clients=false 调用老的监控接口
scp -r /data/ssl/token.csv k8s-master2:/opt/kubernetes/cfg
scp -r /data/ssl/token.csv k8s-master3:/opt/kubernetes/cfg
scp -r /opt/kubernetes/bin/kube* k8s-master2:/opt/kubernetes/bin/
scp -r /opt/kubernetes/bin/kube* k8s-master3:/opt/kubernetes/bin/
scp -r /data/k8s-master k8s-master2:/data/
scp -r /data/k8s-master k8s-master3:/data/
# k8s-master2 运行
./apiserver.sh 192.168.1.127 https://192.168.1.126:2379,https://192.168.1.127:2379,https://192.168.1.128:2379
./scheduler.sh 127.0.0.1
./controller-manager.sh 127.0.0.1
# k8s-master3 运行
./apiserver.sh 192.168.1.128 https://192.168.1.126:2379,https://192.168.1.127:2379,https://192.168.1.128:2379
./scheduler.sh 127.0.0.1
./controller-manager.sh 127.0.0.1
- 登陆七牛云或者阿里云slb控制台设置slb,前后监控都为6443端口,TCP方式(本文使用七牛云ECS搭建,他们slb有内网和外网地址,阿里云只显示外网地址)
- k8s-master1 上创建node授权用户
1 | kubectl create clusterrolebinding kubelet-bootstrap --clusterrole=system:node-bootstrapper --user=kubelet-bootstrap |
- 检查集群
1 | [root@k8s-master1 k8s-master]# kubectl get cs |
1.7 运行Node组件
在k8s-master1 操作1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46mkdir /data/k8s-node
cd /data/k8s-node
vim kubelet.sh
#!/bin/bash
NODE_ADDRESS=${1:-"192.168.1.126"}
DNS_SERVER_IP=${2:-"10.10.0.2"}
cat <<EOF >/opt/kubernetes/cfg/kubelet
KUBELET_OPTS="--logtostderr=true \\
--v=4 \\
--address=${NODE_ADDRESS} \\
--hostname-override=${NODE_ADDRESS} \\
--kubeconfig=/opt/kubernetes/cfg/kubelet.kubeconfig \\
--experimental-bootstrap-kubeconfig=/opt/kubernetes/cfg/bootstrap.kubeconfig \\
--cert-dir=/opt/kubernetes/ssl \\
--allow-privileged=true \\
--cluster-dns=${DNS_SERVER_IP} \\
--cluster-domain=cluster.local \\
--fail-swap-on=false \\
--pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.0"
EOF
cat <<EOF >/usr/lib/systemd/system/kubelet.service
[Unit]
Description=Kubernetes Kubelet
After=docker.service
Requires=docker.service
[Service]
EnvironmentFile=-/opt/kubernetes/cfg/kubelet
ExecStart=/opt/kubernetes/bin/kubelet \$KUBELET_OPTS
Restart=on-failure
KillMode=process
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable kubelet
systemctl restart kubelet
1 | vim proxy.sh |
1 | cd /data/k8s/kubernetes/server/bin |
1.8 查看集群状态
1 | kubectl get componentstatus |
1.9 安装calico网络,使用IPIP模式
- calico介绍
1 | Calico组件: |
- 为各Node部署calico的步骤如下:
1、下载部署的yaml文件(在k8s-master1操作):
1 | # 参照官方文档:https://docs.projectcalico.org/v2.6/getting-started/kubernetes/installation/hosted/hosted |
2、对于RBAC文件,不用做修改,直接创建即可:
1 | # kubectl create -f calico-rbac.yaml |
3、配置calico
1 | # vim calico.yaml |
1 | 关于ConfigMap部分主要参数如下: |
4、创建:
1 | # kubectl create -f calico.yaml |
1 | DaemonSet: |
5、修改kubelet配置:
1 | 设置各node上Kubelet服务的启动参数: --network-plugin=cni, 可能还要加上这两个参数: |
1 | # 本文修改后的 kubelet 配置 |
6,验证各Node间网络联通性:
1 | kubelet启动后主机上就生成了一个tunl0接口。 |
1 | # 如果设置CALICO_IPV4POOL_IPIP="off" ,即不使用IPIP模式,则Calico将不会创建tunl0网络接口,路由规则直接使用物理机网卡作为路由器转发。 |
1.10 集群CoreDNS部署
1、下载coredns部署包(k8s-master机器上操作)
1 | # 参考链接:https://my.oschina.net/u/2306127/blog/1788566 |
2、部署CoreDNS
1 | # 默认情况下CLUSTER_DNS_IP是自动获取kube-dns的集群ip的,但是由于没有部署kube-dns所以只能手动指定一个集群ip了 |
3、测试dns解析1
dig kube-dns.kube-system.svc.cluster.local @10.10.0.2 #能解析出ip就说明dns部署成功
1.11 集群dashboard、监控部署
1 | 参考链接: |
1、拷贝*.yp14.cn证书
1 | # 通过Let's Encrypt 免费获取通配符证书实现Https |
2、创建认证secret1
kubectl create secret generic kubernetes-dashboard-certs --from-file=$HOME/certs -n kube-system
3、创建相关yaml配置文件
1 | # mkdir -p /root/yaml/kubernetes-dashboard |
1 | kubectl apply -f kubernetes-dashboard.yaml |
1 | # vim heapster-rbac.yaml |
1 | kubectl apply -f heapster-rbac.yaml -f heapster.yaml |
1 | # vim influxdb.yaml |
1 | kubectl apply -f influxdb.yaml |
1 | # vim grafana.yaml |
1 | kubectl apply -f grafana.yaml |
1 | # 查看部署是否成功 |
1.12 调整集群参数,为node预留资源
1 | # 设置node保留资源配置(机器配置2核4G,参数只是参考,并不是唯一) 参考 https://blog.8mi.net/Kubernetes/75.html |
1 | systemctl restart kubelet |
---本文结束感谢您的阅读。微信扫描二维码,关注我的公众号---
本文链接: https://www.yp14.cn/2018/09/30/Kubernetes-v1-12-0-HA搭建/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!