方式1. minikube
方式3. 直接使用epel-release yum源,缺点就是版本较低 1.5
从官方下载发行版的二进制包,手动部署每个组件,组成Kubernetes集群。
二进制方式部署k8s集群
目标任务:
1、Kubernetes集群部署架构规划
2、部署Etcd集群
3、在Node节点安装Docker
4、部署Flannel网络
5、在Master节点部署组件
6、在Node节点部署组件
7、查看集群状态
8、运行一个测试示例
9、部署Dashboard(Web UI)
—— 3个证书工具下载,授权+x
—— 3个证书移动位置改名字
—— 创建以下三个文件:
#生成ca中心的 ca-config.json
#生成ca中心的证书请求文件 ca-csr.json
#生成服务器的证书请求文件 server-csr.json
—— 生成证书:
# cfssl gencert -initca ca-csr.json | cfssljson -bare ca -
# cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=www server-csr.json | cfssljson -bare server
# ls *pem
ca-key.pem ca.pem server-key.pem server.pem
三个etcd节点操作一样,唯一不同的是etcd配置文件中的服务器IP要写当前的
—— 下载 etcd包
—— 创文件 # mkdir -p /opt/etcd/{bin,cfg,ssl}
—— 解压 etcd包
—— 移动文件位置 # mv etcd-v3.2.12-linux-amd64/{etcd,etcdctl} /opt/etcd/bin/
—— # vim /opt/etcd/cfg/etcd (每个节点名称不一样)
—— # vim /usr/lib/systemd/system/etcd.service
—— # cd /root/cert/
—— # cp ca*pem server*pem /opt/etcd/ssl
—— 直接拷贝到剩余两台etcd机器:
# scp ca*pem server*pem k8s-node1:/opt/etcd/ssl
# scp ca*pem server*pem k8s-node2:/opt/etcd/ssl
—— # systemctl daemon-reload
—— # systemctl start etcd
—— # systemctl enable etcd
—— # /opt/etcd/bin/etcdctl --ca-file=/opt/etcd/ssl/ca.pem --cert-file=/opt/etcd/ssl/server.pem --key-file=/opt/etcd/ssl/server-key.pem --endpoints="https://IP1:2379,https://IP2:2379,https://IP3:2379" cluster-health
# yum install -y yum-utils device-mapper-persistent-data lvm2 git
# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# yum install docker-ce -y
# systemctl start docker #启动设置开机自启
# curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://bc437cce.m.daocloud.io #配置加速器
mkdir -pv /opt/kubernetes/bin
mkdir -pv /opt/kubernetes/cfg
vim /usr/lib/systemd/system/flanneld.service
vim /usr/lib/systemd/system/docker.service
api-server创建的证书。别的服务访问api-server的时候需要通过证书认证
创建CA证书:
(1)mkdir -p /opt/crt/
cd /opt/crt
vim /opt/crt/ca-config.json
vim ca-csr.json
(2)cfssl gencert -initca ca-csr.json | cfssljson -bare ca -
生成apiserver证书:
(3)vim server-csr.json
(4)cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes server-csr.json | cfssljson -bare server
生成kube-proxy证书:
(5)vim kube-proxy-csr.json
(6)cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kube-proxy-csr.json | cfssljson -bare kube-proxy
最终生成以下证书文件:
(7)ls *.pem
(1)mkdir /opt/kubernetes/{bin,cfg,ssl} -pv
(2)解压 kubernetes-server-linux-amd64.tar.gz
(3)cd kubernetes/server/bin
(4)cp kube-apiserver kube-scheduler kube-controller-manager kubectl /opt/kubernetes/bin
(5)cd /opt/crt/
cp server.pem server-key.pem ca.pem ca-key.pem /opt/kubernetes/ssl/
(6)创建token文件:
cd /opt/kubernetes/cfg/
vim token.csv
(7)创建apiserver配置文件:
vim kube-apiserver
(8)systemd管理apiserver:
cd /usr/lib/systemd/system
vim kube-apiserver.service
(1)创建schduler配置文件:
vim /opt/kubernetes/cfg/kube-scheduler
(2)systemd管理schduler组件:
cd /usr/lib/systemd/system/
vim kube-scheduler.service
(1)创建controller-manager配置文件:
cd /opt/kubernetes/cfg/
vim kube-controller-manager
(2)systemd管理controller-manager组件:
cd /usr/lib/systemd/system/
vim kube-controller-manager.service
(1)将kubelet-bootstrap用户绑定到系统集群角色
/opt/kubernetes/bin/kubectl create 。。。。。。。
(2)创建kubeconfig文件:
在生成kubernetes证书的目录下执行以下命令生成kubeconfig文件:
cd /opt/crt/
——指定apiserver 内网负载均衡地址
KUBE_APISERVER="https://IP1:6443" #写你master的ip地址,集群中就写负载均衡的ip地址
BOOTSTRAP_TOKEN=674c457d4dcf2eefe4920d7dbb6b0ddc
——设置集群参数
/opt/kubernetes/bin/kubectl config 。。。。。。。。。
——设置客户端认证参数
/opt/kubernetes/bin/kubectl config 。。。。。。。。。
——设置上下文参数
/opt/kubernetes/bin/kubectl config 。。。。。。。。
——设置默认上下文
/opt/kubernetes/bin/kubectl config。。。。。。。。。。
(3)创建kube-proxy kubeconfig文件
——设置集群参数
——设置客户端认证参数
——设置上下文参数
——设置默认上下文
(4)#必看:将这两个文件拷贝到Node节点/opt/kubernetes/cfg目录下。
scp *.kubeconfig k8s-node1:/opt/kubernetes/cfg/
scp *.kubeconfig k8s-node2:/opt/kubernetes/cfg/
将前面下载的二进制包中的kubelet和kube-proxy拷贝到/opt/kubernetes/bin目录下
——解压tar xzf kubernetes-server-linux-amd64.tar.gz
——cd kubernetes/server/bin/
——cp kubelet kube-proxy /opt/kubernetes/bin/
——在两个node节点创建kubelet配置文件:
vim /opt/kubernetes/cfg/kubelet
—— 文件里有镜像要下载镜像
docker pull registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.0
——文件里还有个配置文件要自己手写
vim /opt/kubernetes/cfg/kubelet.config
——ystemd管理kubelet组件:
vim /usr/lib/systemd/system/kubelet.service
——启动:
# systemctl daemon-reload
# systemctl enable kubelet
# systemctl start kubelet
# /opt/kubernetes/bin/kubectl get csr
——查看集群节点信息:
[root@k8s-master1 ~]# /opt/kubernetes/bin/kubectl get node
——创建kube-proxy配置文件
# vim /opt/kubernetes/cfg/kube-proxy
——systemd管理kube-proxy组件:
# vim /usr/lib/systemd/system/kube-proxy.service
——启动:
# systemctl daemon-reload
# systemctl enable kube-proxy
# systemctl start kube-proxy
——在master查看集群状态
[root@k8s-master1 ~]# /opt/kubernetes/bin/kubectl get node
——查看集群状态
[root@k8s-master1 ~]# /opt/kubernetes/bin/kubectl get cs
NAME STATUS MESSAGE ERROR
scheduler Healthy ok
controller-manager Healthy ok
etcd-0 Healthy {"health": "true"}
etcd-1 Healthy {"health": "true"}
etcd-2 Healthy {"health": "true"}
* dashboard-deployment.yaml #部署Pod,提供Web服务
* dashboard-rbac.yaml #授权访问apiserver获取信息
* dashboard-service.yaml #发布服务,提供对外访问
——创建一个目录
[root@k8s-master ~]# mkdir webui
[root@k8s-master ~]# cd webui/
[root@k8s-master webui]# vim dashboard-deployment.yaml
[root@k8s-master webui]# vim dashboard-rbac.yaml
[root@k8s-master webui]#vim dashboard-service.yaml
[root@k8s-master webui]# /opt/kubernetes/bin/kubectl create -f dashboard-rbac.yaml
[root@k8s-master webui]# /opt/kubernetes/bin/kubectl create -f dashboard-deployment.yaml
[root@k8s-master webui]# /opt/kubernetes/bin/kubectl create -f dashboard-service.yaml
等待数分钟,查看资源状态:
——查看名称空间:
[root@k8s-master webui]# /opt/kubernetes/bin/kubectl get all -n kube-system
——查看指定命名空间的服务
[root@k8s-master webui]# /opt/kubernetes/bin/kubectl get svc -n kube-system
==========================================================
运行一个测试示例--在master节点先安装docker服务
创建一个Nginx Web,判断集群是否正常工
# /opt/kubernetes/bin/kubectl run nginx --image=daocloud.io/nginx --replicas=3
# /opt/kubernetes/bin/kubectl expose deployment nginx --port=88 --target-port=80 --type=NodePort# /opt/kub.../bin/kubectl delete -f deployment --all
在master上面查看:
查看Pod,Service:
# /opt/kubernetes/bin/kubectl get pods #需要等一会
NAME READY STATUS RESTARTS AGE
nginx-64f497f8fd-fjgt2 1/1 Running 3 28d
nginx-64f497f8fd-gmstq 1/1 Running 3 28d
nginx-64f497f8fd-q6wk9 1/1 Running 3 28d查看pod详细信息:
# /opt/kubernetes/bin/kubectl describe pod nginx-64f497f8fd-fjgt2# /opt/kubernetes/bin/kubectl get svc
访问nodeip加端口
打开浏览器输入:http://192.168.246.164:38696恭喜你,集群部署成功!
============================