架构图
Kubernetes节点
在这张系统架构图中,我们把服务分为运行在工作节点上的服务和组成集群级别控制板的服务。
Kubernetes节点有运行应用容器必备的服务,而这些都是受Master的控制。
每次个节点上当然都要运行Docker。Docker来负责所有具体的映像下载和容器运行。
Kubernetes主要由以下几个核心组件组成:
- etcd保存了整个集群的状态;
- apiserver提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制;
- controller manager负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;
- scheduler负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上;
- kubelet负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理;
- Container runtime负责镜像管理以及Pod和容器的真正运行(CRI);
- kube-proxy负责为Service提供cluster内部的服务发现和负载均衡;
除了核心组件,还有一些推荐的Add-ons:
- kube-dns负责为整个集群提供DNS服务
- Ingress Controller为服务提供外网入口
- Heapster提供资源监控
- Dashboard提供GUI
- Federation提供跨可用区的集群
- Fluentd-elasticsearch提供集群日志采集、存储与查询
参考学习文档 https://github.com/easzlab/kubeasz
Host Name | Role | IP | conf | version |
---|---|---|---|---|
master-bak | master (用于测试添加) | 10.2.33.101 | 4C8G | centos7.5 |
master-1 | master etcd 部署节点 | 10.2.33.100 | 4C8G | centos7.5 |
master-2 | master etcd | 10.2.33.99 | 4C8G | centos7.5 |
master-3 | master etcd | 10.2.33.98 | 4C8G | centos7.5 |
node-1 | node | 10.2.33.97 | 8C16G | centos7.5 |
node-2 | node | 10.2.33.96 | 8C16G | centos7.5 |
node-3 | node | 10.2.33.95 | 8C16G | centos7.5 |
node-bak | node(用于测试添加) | 10.2.33.94 | 8C16G | centos7.5 |
所有服务器初始化、安装python2.7
部署节点配置如下:
yum -y install ansible
ssh-keygen
ssh-copy-id -i /root/.ssh/id_rsa root@10.2.33.95-100
curl -C- -fLO --retry 3 https://github.com/easzlab/kubeasz/releases/download/3.1.1/ezdown
chmod +x ezdown
./ezdown -D
上述脚本运行成功后,所有文件(kubeasz代码、二进制、离线镜像)均已整理好放入目录/etc/kubeasz
cd /etc/kubeasz/
./ezctl new k8s-01
cd clusters/k8s-01/
然后根据提示配置'/etc/kubeasz/clusters/k8s-01/hosts' 和 '/etc/kubeasz/clusters/k8s-01/config.yml':
根据前面节点规划修改hosts 文件和其他集群层面的主要配置选项;其他集群组件等配置项可以在config.yml 文件中修改。
# 一键安装
ezctl setup k8s-01 all
# 或者分步安装,具体使用 ezctl help setup 查看分步安装帮助信息
# ezctl setup k8s-01 01
# ezctl setup k8s-01 02
# ezctl setup k8s-01 03
# ezctl setup k8s-01 04
# ezctl setup k8s-01 05
# ezctl setup k8s-01 06
# ezctl setup k8s-01 07
##########dashboard#########
[root@localhost ssl]# kubectl get svc -n kube-system|grep dashboard
dashboard-metrics-scraper ClusterIP 10.68.37.90 <none> 8000/TCP 16h
kubernetes-dashboard NodePort 10.68.154.239 <none> 443:32543/TCP 16h
[root@localhost ssl]# kubectl get svc -n kube-system -o wide |grep dashboard
dashboard-metrics-scraper ClusterIP 10.68.37.90 <none> 8000/TCP 16h k8s-app=dashboard-metrics-scraper
kubernetes-dashboard NodePort 10.68.154.239 <none> 443:32543/TCP 16h k8s-app=kubernetes-dashboard
#kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')
Name: admin-user-token-bhpgw
Namespace: kube-system
Labels: <none>
Annotations: kubernetes.io/service-account.name: admin-user
kubernetes.io/service-account.uid: e14095d4-098b-42d3-8e04-84ac8e47e5e6
Type: kubernetes.io/service-account-token
Data
====
ca.crt: 1350 bytes
namespace: 11 bytes
token: eyJhbGciOiJSUzI1NiIsImtpZCI6InA1OFZxRzlrZUVrc0c0OTRlZ0pKMWFDVnhhMWxhYVRJYnRWNXZsQU03NTAifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLWJocGd3Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJlMTQwOTVkNC0wOThiLTQyZDMtOGUwNC04NGFjOGU0N2U1ZTYiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06YWRtaW4tdXNlciJ9.bp-l1M-yu4qnpAyeCuVoptlW1g8awQDI0XD89dr-RCNDQGpnRVpt5Ws5K0yLRSilA8Q4YdlHHQMckGmxdom0TiFk9Vr5BukdO51g7VIyOd__ZnIbRRRTtuNpO7PvkxzxyVRW9a5I89JDLPb2ptKLHBrolVGJK3DHZJbqc29ATYlYxoN2cDNYmNjacGXIyKfAxZkrcxxMEx9AebLAfbGQaVzKXPUapPMhTDo-flcR9Z3xBKXXoS0AQ3pA8rGOGi7qmsvXYEYvW_RKj2zCSZw7Cr_5Qnb6_EKB6lmSRGa7Uec5TeMyiw-FYSQmaVVOOF1wk-bDxauaJmh7prqRNw85tA
火狐浏览器访问
https://master_ip:32543 (输入以上的token,admin管理用户登陆)
##########Prometheus#########
/etc/kubeasz/clusters/k8s-01/config.yml 中配置项 prom_install: "yes"
ezctl setup k8s-01 07 (多执行几次,会下载失败,多等会安装慢)
#查询安装状态
[root@localhost k8s-01]# kubectl get pod,svc -n monitor
NAME READY STATUS RESTARTS AGE
pod/alertmanager-prometheus-kube-prometheus-alertmanager-0 2/2 Running 0 63m
pod/prometheus-grafana-55c5f574d9-z7fpk 2/2 Running 0 64m
pod/prometheus-kube-prometheus-operator-5f6774b747-8qvrx 1/1 Running 0 64m
pod/prometheus-kube-state-metrics-5f89586745-4zqqs 1/1 Running 0 64m
pod/prometheus-prometheus-kube-prometheus-prometheus-0 2/2 Running 1 (23m ago) 63m
pod/prometheus-prometheus-node-exporter-2smhh 1/1 Running 0 64m
pod/prometheus-prometheus-node-exporter-k24jp 1/1 Running 0 64m
pod/prometheus-prometheus-node-exporter-n5wxb 1/1 Running 0 64m
pod/prometheus-prometheus-node-exporter-vm5zl 1/1 Running 0 64m
pod/prometheus-prometheus-node-exporter-xwpv4 1/1 Running 0 64m
pod/prometheus-prometheus-node-exporter-zjv95 1/1 Running 0 64m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/alertmanager-operated ClusterIP None <none> 9093/TCP,9094/TCP,9094/UDP 63m
service/prometheus-grafana NodePort 10.68.202.166 <none> 80:30903/TCP 64m
service/prometheus-kube-prometheus-alertmanager NodePort