浅尝kubernetes
前言:我们早学习一门技术之前并不需要从头到尾的详细的查看一遍,只需要看一看是什么?能干什么?怎么用?即可!
一、了解kubernetes
Kubernetes 也称为 K8s,是用于自动部署、扩缩和管理容器化应用程序的开源系统。它将组成应用程序的容器组合成逻辑单元,以便于管理和服务发现。Kubernetes 源自Google 15 年生产环境的运维经验,同时凝聚了社区的最佳创意和实践。
内容简介
Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡。
在Kubernetes中,我们可以创建多个容器,每个容器里面运行一个应用实例,然后通过内置的负载均衡策略,实现对这一组应用实例的管理、发现、访问,而这些细节都不需要运维人员去进行复杂的手工配置和处理。
特点
- 可移植: 支持公有云,私有云,混合云,多重云(multi-cloud)
- 可扩展: 模块化,插件化,可挂载,可组合
- 自动化: 自动部署,自动重启,自动复制,自动伸缩/扩展
组件
-
Master 组件
-
- kube-apiserver
- ETCD
- kube-controller-manager
- cloud-controller-manager
- kube-scheduler
- 插件 addons
- DNS
- 用户界面
- 容器资源监测
- Cluster-level Logging
-
节点(Node)组件
-
- kubelet
- kube-proxy
- dockers
- RKT
- supervisord
- fluentd
Master 组件
Master组件提供集群的管理控制中心。
Master组件可以在集群中任何节点上运行。但是为了简单起见,通常在一台VM/机器上启动所有Master组件,并且不会在此VM/机器上运行用户容器。请参考构建高可用群集以来构建multi-master-VM。
kube-apiserver
kube-apiserver用于暴露Kubernetes API。任何的资源请求/调用操作都是通过kube-apiserver提供的接口进行。请参阅构建高可用集群。
ETCD
etcd是Kubernetes提供默认的存储系统,保存所有集群数据,使用时需要为etcd数据提供备份计划。
kube-controller-manager
kube-controller-manager运行管理控制器,它们是集群中处理常规任务的后台线程。逻辑上,每个控制器是一个单独的进程,但为了降低复杂性,它们都被编译成单个二进制文件,并在单个进程中运行。
这些控制器包括:
- 节点(Node)控制器。
- 副本(Replication)控制器:负责维护系统中每个副本中的pod。
- 端点(Endpoints)控制器:填充Endpoints对象(即连接Services&Pods)。
- Service Account和Token控制器:为新的Namespace创建默认帐户访问API Token。
cloud-controller-manager
- 副本(Replication)控制器:负责维护系统中每个副本中的pod。
- 端点(Endpoints)控制器:填充Endpoints对象(即连接Services&Pods)。
- Service Account和Token控制器:为新的Namespace创建默认帐户访问API Token。
kube-scheduler
kube-scheduler监视新创建没有分配到Node的Pod,为Pod选择一个Node。
插件 addons
插件(addon)是实现集群pod和Services功能的。Pod由Deployments,ReplicationController等进行管理。Namespace 插件对象是在kube-system Namespace中创建。
DNS
虽然不严格要求使用插件,但Kubernetes集群都应该具有集群 DNS。
群集 DNS是一个DNS服务器,能够为 Kubernetes services提供 DNS记录。
由Kubernetes启动的容器自动将这个DNS服务器包含在他们的DNS searches中。
用户界面
kube-ui提供集群状态基础信息查看。
容器资源监测
容器资源监控提供一个UI浏览监控数据。
Cluster-level Logging
Cluster-level logging,负责保存容器日志,搜索/查看日志。
节点 Node 组件
节点组件运行在Node,提供Kubernetes运行时环境,以及维护Pod。
kubelet
kubelet是主要的节点代理,它会监视已分配给节点的pod,具体功能:
- 安装Pod所需的volume。
- 下载Pod的Secrets。
- Pod中运行的 docker(或experimentally,rkt)容器。
- 定期执行容器健康检查。
- Reports the status of the pod back to the rest of the system, by creating amirror podif necessary.
- Reports the status of the node back to the rest of the system.
kube-proxy
kube-proxy通过在主机上维护网络规则并执行连接转发来实现Kubernetes服务抽象。
docker
docker用于运行容器。
RKT
rkt运行容器,作为docker工具的替代方案。
supervisord
supervisord是一个轻量级的监控系统,用于保障kubelet和docker运行。
fluentd
fluentd是一个守护进程,可提供cluster-level loggi
二、kubernetes的安装
使用部署工具安装 Kubernetes的方式有很多,我喜欢第三种方式他是图形化的安装方式,比较适合小白
- 使用 kubeadm 引导集群
- 使用 kOps 安装 Kubernetes
- 使用 Kubespray 安装 Kubernetes
Kuboard-Spray
Kuboard-Spray 是一款可以在图形界面引导下完成 Kubernetes 高可用集群离线安装的工具,开源仓库的地址为 Kuboard-Spray
准备工作
需要注意的是 我们需要两台电脑,或者说是两天服务器,应为Kuboard-Spray不能和kubernetes在一台服务器上(虚拟机除外)
其实我们可是在自己的笔记本上安装Docker,通过Docker的方式在本机上安装 Kuboard-Spray,只需要保证笔记本能够访问将要安装K8s的服务器就可以(有跳板机也行)。
安装 Kuboard-Spray
-
取一台服务器或虚拟机,执行一条命令,即可完成 Kuboard-Spray 的安装。
对这台服务器的最低要求为:
-
1核2G
-
不少于 10G 磁盘空余空间
-
已经安装好 docker
待执行的命令如下:
-
docker run -d \
--privileged \
--restart=unless-stopped \
--name=kuboard-spray \
-p 8080:80/tcp \
-v /var/run/docker.sock:/var/run/docker.sock \
-v ~/kuboard-spray-data:/data \
eipwork/kuboard-spray:v1.24-amd64
# 如果抓不到这个镜像,可以尝试一下这个备用地址:
# swr.cn-east-2.myhuaweicloud.com/kuboard/kuboard-spray:latest-amd64
- 在浏览器打开地址
http://这台机器的IP:8080
,输入用户名admin
,默认密码Kuboard123
,即可登录 Kuboard-Spray 界面
加载离线资源包
首先我们需要先下载离线包,要注意的是版本需要和上面kuboard-spray:v1.24-amd64 所对应,不然会报错
-
在 Kuboard-Spray 界面中,导航到
系统设置
-->资源包管理
界面,可以看到已经等候您多时的Kuboard-Spray 离线资源包
,如下图所示: -
点击
导 入
按钮,在界面的引导下完成资源包的加载。-
权限问题
- 导入资源包时,可能会碰到
no such file or directory
或者permission denied
之类的错误提示,通常是因为您开启了 SELinux,导致 kuboard-spray 不能读取映射到容器/data
的路径
- 导入资源包时,可能会碰到
-
离线导入
- 如果您处在内网环境,上图中的列表默认将是空的,请注意其中的
离线加载资源包
按钮,它可以引导您轻松完成资源包的离线加载过程
- 如果您处在内网环境,上图中的列表默认将是空的,请注意其中的
-
规划并安装集群
-
在 Kuboard-Spray 界面中,导航到
集群管理
界面,点击界面中的添加集群安装计划
按钮,填写表单如下:- 集群名称: 自定义名称,本文中填写为 kuboard123,此名称不可以修改;
- 资源包:选择前面步骤中导入的离线资源包。
-
点击上图对话框中的
确定
按钮后,将进入集群规划页面,在该界面中添加您每个集群节点的连接参数并设置节点的角色,如下图所示:重要: kuboard-spray 所在机器不能当做 K8S 集群的一个节点,因为安装过程中会重启集群节点的容器引擎,这会导致 kuboard-spray 被重启掉。
-
点击上图的
保存
按钮,再点击执行
按钮,可以启动集群的离线安装过程,如下图所示: -
取决于您机器的性能和网络访问速度,大概喝一杯茶的功夫,集群就安装好了,安装成功时,日志界面的显示如下图所示:
访问集群
-
如果集群日志界面提示您集群已经安装成功,此时您可以返回到集群规划页面,此界面将自动切换到
访问集群
标签页,如下图所示:界面给出了三种方式可以访问 kubernetes 集群:
- 在集群主节点上执行 kubectl 命令
- 获取集群的 .kubeconfig 文件
- 将集群导入到 kuboard管理界面
三、k8s常用的命令
下面是一些常用的Kubernetes(K8s)命令,以及它们的简要说明。这些命令可以帮助您管理和操作Kubernetes集群中的资源。
集群管理命令:
kubectl cluster-info
: 显示集群的基本信息。kubectl config use-context <context_name>
: 切换到指定的上下文。kubectl get nodes
: 列出集群中的节点。kubectl describe node <node_name>
: 显示节点的详细信息。
命名空间管理命令:
kubectl get namespaces
: 列出所有命名空间。kubectl create namespace <namespace_name>
: 创建一个命名空间。kubectl delete namespace <namespace_name>
: 删除一个命名空间及其下的所有资源。kubectl config set-context --current --namespace=<namespace_name>
: 设置当前上下文的命名空间。
资源查看和操作命令:
kubectl get <resource_type>
: 列出指定类型的资源。kubectl describe <resource_type> <resource_name>
: 显示指定资源的详细信息。kubectl create -f <yaml_file>
: 根据 YAML 文件创建资源。kubectl apply -f <yaml_file>
: 根据 YAML 文件创建或更新资源。kubectl delete <resource_type> <resource_name>
: 删除指定的资源。
Pod 相关命令:
kubectl get pods
: 列出所有 Pod。kubectl describe pod <pod_name>
: 显示 Pod 的详细信息。kubectl logs <pod_name>
: 查看 Pod 的日志。kubectl exec -it <pod_name> -- <command>
: 在 Pod 内部执行命令。
服务相关命令:
kubectl get services
: 列出所有服务。kubectl describe service <service_name>
: 显示服务的详细信息。kubectl port-forward <pod_name> <host_port>:<container_port>
: 将本地端口转发到 Pod 的端口。
部署相关命令:
kubectl get deployments
: 列出所有部署。kubectl describe deployment <deployment_name>
: 显示部署的详细信息。kubectl scale deployment <deployment_name> --replicas=<replica_count>
: 扩展或缩减部署的副本数量。
配置和密钥相关命令:
kubectl create configmap <configmap_name> --from-file=<file_path>
: 创建配置映射。kubectl create secret <secret_type> <secret_name> --from-literal=<key>=<value>
: 创建密钥。
这些命令涵盖了Kubernetes的常见功能和用例,可以帮助您管理和操作集群中的资源。您可以通过在命令后面添加 --help
选项来获取更多关于每个命令的详细帮助信息。例如:kubectl get pods --help