使用Kubeeasy工具部署Kubernetes平台
1,节点规划:
IP地址 | 主机名 | 节点 |
---|---|---|
10.24.2.10 | Master | Kubernetes集群master节点、Harbor仓库节点 |
10.24.2.11 | Worker | Kubernetes集群node节点 |
10.26.10.11 | 图形界面,作为测试虚拟机 | |
10.24.2.12 | 任务5.2添加的节点IP |
2,基础环境配置
将提供的安装包chinaskills_cloud_paas_v2.0.iso下载至master节点/root目录,并解压到/opt目录:
[root@localhost ~]# curl -O http://mirrors.douxuedu.com/competition/chinaskills_cloud_paas_v2.0.1.iso
[root@localhost ~]# mount -o loop chinaskills_cloud_paas_v2.0.1.iso /mnt/
[root@localhost ~]# cp -rfv /mnt/* /opt/
[root@localhost ~]# umount /mnt/
2.1安装kubeeasy
kubeeasy为Kubernetes集群专业部署工具,极大的简化了部署流程。其特性如下:
- ● 全自动化安装流程;
- ● 支持DNS识别集群;
- ● 支持自我修复:一切都在自动扩缩组中运行;
- ● 支持多种操作系统(如 Debian、Ubuntu 16.04、CentOS7、RHEL等);
- ● 支持高可用。
在master节点安装kubeeasy工具:
[root@localhost ~]# mv /opt/kubeeasy /usr/bin/kubeeasy
2.2安装依赖包
此步骤主要完成docker-ce、git、unzip、vim、wget等工具的安装。
在master节点执行以下命令完成依赖包的安装:
[root@localhost ~]# kubeeasy install depend \
--host 10.24.2.10,10.24.2.11 \
# --host:所有主机节点IP,如:10.24.1.2-10.24.1.10,中间用“-”隔开,表示10.24.1.2到10.24.1.10范围内的所有IP。若IP地址不连续,则列出所有节点IP,用逗号隔开,如:10.24.1.2,10.24.1.7,10.24.1.9。
--user root \
--password Abc@1234 \
# --user:主机登录用户,默认为root。
# --password:主机登录密码,所有节点需保持密码一致。
--offline-file /opt/dependencies/base-rpms.tar.gz
# --offline-file:离线安装包路径。
2.3 配置ssh免密登录
安装Kubernetes集群的时候,需要配置Kubernetes集群各节点间的免密登录,方便传输文件和通讯。
在master节点执行以下命令完成集群节点的连通性检测:
[root@localhost ~]# kubeeasy check ssh \
--host 10.24.2.10,10.24.2.11 \
--user root \
--password Abc@1234
#--master参数后面接master节点IP,--worker参数后面跟所有节点IP
3,部署Kubernetes集群
3.1安装Kubernetes集群
本次安装的Kubernetes版本为v1.22.1。
在master节点执行以下命令部署Kubernetes集群:
[root@localhost ~]# kubeeasy install kubernetes \
--master 10.24.2.10 \
--worker 10.24.2.11 \
--user root \
--password Abc@1234 \
--version 1.22.1 \
--offline-file /opt/kubernetes.tar.gz
部署完成后查看集群状态:
[root@k8s-master-node1 ~]# kubectl cluster-info
Kubernetes control plane is running at https://apiserver.cluster.local:6443
CoreDNS is running at https://apiserver.cluster.local:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
查看节点负载情况:
[root@k8s-master-node1 ~]# kubectl top nodes --use-protocol-buffers
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
k8s-master-node1 389m 4% 6926Mi 43%
k8s-worker-node1 875m 10% 3365Mi 21%
3.2登录一道云云开发平台
在浏览器上访问一道云云开发平台(http://master_IP:30080),设置admin用户的密码(Abc@1234)
4,kubectk 常用命令
4.1创建资源对象:
# kubectl create -f xxx.yaml(文件)
# kubectl create -f <directory>(目录下所有文件)
4.2查看资源对象:
# kubectl get nodes
# kubectl get pods -n <namespace> -o wide
4.3描述资源对象:
# kubectl describe nodes <node-name>
# kubectl describe pod <pod-name> -n <namespace>
4.4删除资源对象:
# kubectl delete -f <filename>
# kubectl delete pods,services -l name=<label-name>
# kubectl delete pods --all
4.5执行容器命令:
# kubectl exec <pod-name> date (默认使用第一个容器执行Pod的date命令)
# kubectl exec <pod-name> -c <container-name> date(指定Pod中的某个容器执行date命令)
# kubectl exec -it <pod-name> -c <container-name> /bin/bash (相当与docker exec -it <container-name> /bin/bash)
4.6查看容器日志:
# kubectl logs <pod-name>
# kubectl logs -f <pod-name> -c <container-name> (相当于tail -f 命令)
5,kubectl 格式化输出
5.1显示pod的更多信息:
# kubectl get pods -n <namespace> -o wide
5.2以yaml格式显示:
# kubectl get pods -n <namespace> -o yaml
5.3以自定义列显示Pod信息:
# kubectl get pod <pod-name> -n <namespace> -o custom-columns=NAME:.metadata.name,"ANNOTATIONS":.metadata.annotations
5.4基于文件的自定义列名输出:
# kubectl get pods <pod-name> -o=custom-columns-file=template.txt
5.5输出结果排序:
# kubectl get pods --sort-by=.metadata.name
6,部署KubeVirt集群
6.1安装KubeVirt
在本次安装的KubeVirt版本为v0.47.1。
在master节点执行以下命令安装KubeVirt:
[root@k8s-master-node1 ~]# kubeeasy add --virt kubevirt
查看Pod:
[root@k8s-master-node1 ~]# kubectl -n kubevirt get pods
NAME READY STATUS RESTARTS AGE
virt-api-8d998846b-2xx5m 1/1 Running 0 86s
virt-api-8d998846b-tqwhq 1/1 Running 0 86s
virt-controller-76b86f6965-gz8m4 1/1 Running 0 62s
virt-controller-76b86f6965-pjjv5 1/1 Running 0 62s
virt-handler-hvf45 1/1 Running 0 62s
virt-handler-x7bvj 1/1 Running 0 62s
virt-operator-579f86869c-k9nw4 1/1 Running 0 2m22s
virt-operator-579f86869c-vtrkn 1/1 Running 0 2m22s
6.2基本使用
创建vmi:
# kubectl create -f vmi.yaml
查看vmi:
# kubectl get vmis
删除vmi:
# kubectl delete vmis <vmi-name>
6.3 virtctl 工具
virtctl是KubeVirt自带的类似于kubectl的命令行工具,可以直接管理虚拟机,可以控制虚拟机的start、stop、restart等。
启动虚拟机命令:
# virtctl start <vmi-name>
停止虚拟机命令:
# virtctl stop <vmi-name>
重启虚拟机命令:
#virtctl restart <vmi-name>
7,安装Istiio
本次安装的Istio版本为v1.12.0。
在master节点执行以下命令进行Istio服务网格环境的安装:
[root@k8s-master-node1 ~]# kubeeasy add --istio istio
查看Pod:
[root@k8s-master-node1 ~]# kubectl -n istio-system get pods
NAME READY STATUS RESTARTS AGE
grafana-6ccd56f4b6-twwjv 1/1 Running 0 5m15s
istio-egressgateway-7f4864f59c-nxz2l 1/1 Running 0 5m34s
istio-ingressgateway-55d9fb9f-jzhnb 1/1 Running 0 5m34s
istiod-555d47cb65-jwkgp 1/1 Running 0 5m40s
jaeger-5d44bc5c5d-h9t29 1/1 Running 0 5m15s
kiali-79b86ff5bc-v9sfk 1/1 Running 0 5m15s
prometheus-64fd8ccd65-5px64 2/2 Running 0 5m15s
查看Istio版本信息:
[root@k8s-master-node1 ~]# istioctl version
client version: 1.12.0
control plane version: 1.12.0
data plane version: 1.12.0 (2 proxies)
7.1Istio可视化:
访问Grafana(http://master_IP:33000)
访问Prometheus(http://master_IP:30090)
访问Jaeger(http://master_IP:30686)
访问Kiali(http://master_IP:20001)
7.2Istioctl 基本使用
istioctl用于在Istio系统中创建、列出、修改以及删除配置资源。
可用的路由和流量管理配置类型有virtualservice、gateway、destinationrule、serviceentry、httpapispec、httpapispecbinding、quotaspec、quotaspecbinding、servicerole、servicerolebinding、policy。
使用下面命令展示istioctl可以访问到的Istio配置档的名称:
# istioctl profile list
Istio configuration profiles:
default
demo
empty
external
minimal
openshift
preview
remote
展示配置档的配置信息:
# istioctl profile dump demo
显示配置文件的差异:
# istioctl profile diff default demo
可以使用proxy-status或ps命令概览服务网格:
# istioctl proxy-status
如果输出列表中缺少某个代理,则意味着它当前未连接到Polit实例,所以它无法接收到任何配置。此外,如果它被标记为stale,则意味着存在网络问题或者需要扩展Pilot。
istioctl允许使用proxy-config或者pc命令检索代理的配置信息。
检索特定Pod中Envoy实例的集群配置的信息:
# istioctl proxy-config cluster <pod-name> [flags]
检索特定Pod中Envoy实例的bootstrap配置的信息:
# istioctl proxy-config bootstrap <pod-name> [flags]
检索特定Pod中Envoy实例的监听器配置的信息:
# istioctl proxy-config listener <pod-name> [flags]
检索特定Pod中Envoy实例的路由配置的信息:
# istioctl proxy-config route <pod-name> [flags]
检索特定Pod中Envoy实例的endpoint配置的信息:
# istioctl proxy-config endpoints <pod-name> [flags]
8,安装和使用Harbor仓库
在master节点执行以下命令进行Harbor仓库的安装:
[root@k8s-master-node1 ~]# kubeeasy add --registry harbor
部署完成后查看Harbor仓库状态:
[root@k8s-master-node1 ~]# systemctl status harbor
● harbor.service - Harbor
Loaded: loaded (/usr/lib/systemd/system/harbor.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2021-12-06 14:34:49 CST; 30s ago
Docs: http://github.com/vmware/harbor
Main PID: 7819 (docker-compose)
Tasks: 12
Memory: 11.5M
CGroup: /system.slice/harbor.service
└─7819 /usr/local/bin/docker-compose -f /opt/harbor/docker-compose.yml up
Hint: Some lines were ellipsized, use -l to show in full.
在Web端通过http://master_ip访问Harbor
8.1 docker-compose和Helm安装部署
在docker-compose和Helm的安装部署嵌套在Harbor安装部署包内,安装Harbor的同时,也安装了docker-compose以及Helm。
8.2 helm常用命令
查看版本信息:
# helm version
查看当前安装的Charts:
# helm list
查询Charts:
# helm search <chart-name>
查看Charts状态:
# helm status redis
删除Charts:
# helm delete --purge <chart-name>
创建Charts:
# helm create helm_charts
测试Charts语法:
# helm lint
打包Charts:
# cd helm_charts && helm package ./
查看生成的yaml文件:
# helm template helm_charts-xxx.tgz
9,基础运维
9.1 重置集群基础运维.mp4
若集群部署失败或出现故障,可重置集群重新部署,重置命令如下:
[root@k8s-master-node1 ~]# kubeeasy reset
重置完成后再次执行步骤1.1-1.2即可重新部署集群。
9.2 添加节点
在master节点执行以下命令安装依赖包:
[root@k8s-master-node1 ~]# kubeeasy install depend \
--host 10.24.2.12 \
--user root \
--password Abc@1234 \
--offline-file /opt/dependencies/base-rpms.tar.gz
其中10.24.2.12为新增节点的IP地址。
在master节点执行以下命令即可加入集群:
[root@k8s-master-node1 ~]# kubeeasy add \
--worker 10.24.2.12\
--user root \
--password Abc@1234 \
--offline-file /opt/kubernetes.tar.gz