云原生专栏大纲
文章目录
- k8s中应用部署
- Kubernetes常用命令
- kubesphere中可视化部署应用
- 创建工作负载
- 服务暴露
- helm部署应用
- helm命令行部署应用
- kubesphere中使用应用仓库
k8s中应用部署
在k8s中要想部署应用,需要编写各种yaml文件,一旦应用依赖比较复杂对运维人员极其不友好,对开发人员入门操作门槛较高。k8s有几种常见的应用部署方式,包括:
- Deployment(部署):Deployment是Kubernetes中最常用的应用部署方式之一。它定义了应用程序的副本数量、容器镜像、环境变量等,并确保指定数量的Pod副本在集群中运行。Deployment还支持滚动升级和回滚操作,以实现无宕机的应用程序更新。
- StatefulSet(有状态集):StatefulSet用于部署有状态的应用程序,如数据库。与Deployment不同,StatefulSet为每个Pod分配一个唯一的标识符,这样可以确保每个Pod具有稳定的网络标识和存储。StatefulSet还支持有序部署和扩展,确保应用程序的有状态特性得到维护。
- DaemonSet(守护进程集):DaemonSet用于在集群中的每个节点上运行一个Pod副本。它通常用于部署一些系统级别的服务,如日志收集器、监控代理等。当集群的节点发生变化时,DaemonSet会自动调整Pod的数量和分布,以保持每个节点上都有一个Pod副本。
- Job和CronJob(作业和定时作业):Job用于运行一次性任务,如批处理作业。CronJob是基于时间调度的Job,可定期运行任务。这些部署方式允许在需要时运行任务,并在任务完成后终止或定期重复运行任务。
- Pod(容器组):虽然直接使用Pod来部署应用程序不太常见,但它是Kubernetes中最基本的部署单元。Pod可以包含一个或多个容器,并共享相同的网络和存储资源。在某些情况下,可以直接使用Pod来部署应用程序,但这需要手动管理Pod的生命周期和扩展性。
Kubernetes常用命令
命令 | 描述 |
---|---|
kubectl get pods | 获取所有Pod的列表 |
kubectl get deployments | 获取所有Deployment的列表 |
kubectl get services | 获取所有Service的列表 |
kubectl get nodes | 获取所有节点的列表 |
kubectl create -f | 使用YAML或JSON文件创建资源 |
kubectl apply -f | 使用YAML或JSON文件创建或更新资源 |
kubectl delete <resource_type> <resource_name> | 删除指定类型的资源 |
kubectl describe <resource_type> <resource_name> | 显示指定类型资源的详细信息 |
kubectl logs <pod_name> | 获取指定Pod的日志 |
kubectl exec -it <pod_name> <container_name> – | 在Pod中的容器上执行命令 |
kubectl port-forward <pod_name> <local_port>:<pod_port> | 将本地端口转发到Pod的端口 |
kubectl scale <resource_type> <resource_name> --replicas=<replica_count> | 扩展或缩小指定资源的副本数量 |
kubectl rollout status <resource_type> <resource_name> | 检查滚动升级的状态 |
kubectl rollout history <resource_type> <resource_name> | 查看滚动升级的历史记录 |
kubectl apply -f --dry-run=client -o yaml | 检查资源配置文件的语法错误和效果,但不实际创建资源 |
kubectl get events | 获取集群中的事件列表 |
kubectl get namespaces | 获取所有命名空间的列表 |
kubectl config get-contexts | 获取当前配置的上下文列表 |
kubectl config use-context <context_name> | 切换到指定的上下文 |
这些命令可以帮助您管理和操作Kubernetes集群中的各种资源。请根据您的需求和环境进行相应的调整和使用。
kubesphere中可视化部署应用
kubesphere将k8s中资源进行可视化操作,简化了部署难度,如将上述Deployment、Job等资源可视化为如下截图:
创建工作负载
可在工作负载(Deployment)中部署应用:
- 工作负载创建
- 填写名称
- 填写容器镜像
- 设置容器的资源限制与资源预留
- 容器端口设置
- 设置环境变量
环境变量各有差异取决于部署什么应用,一般可以在https://hub.docker.com/搜索查询
- 挂载数据文件
选择持久卷声明:
- 挂载配置文件
创建字典或保密字段:
选择字典或保密字段:
配置挂载路径:
下一步,创建工作负载
服务暴露
- 创建服务指定工作负载
- 选择工作负载
- 填写容器和服务端口
- 下一步选择外部访问方式
- 查看创建情况
此时可以使用k8s集群宿主机ip+暴露端口访问mysql
helm部署应用
上述部署方式适合单应用部署,一旦应用依赖比较复杂,如部署nacos应用可能需要使用到mysql,就需先部署mysql,在部署nacos。而helm将这些复杂的操作进行了封装提供values.yaml文件对可变动配置进行暴露。在kubesphere中使用helm部署应用可通过原始命令行操作,也可以通过应用仓库操作,应用仓库是helm的可视化操作。
helm命令行部署应用
一般步骤,具体可参考表格命令
- 添加一个 Helm 仓库
- 安装一个 Helm 包
命令 | 描述 | 示例 |
---|---|---|
helm install | 安装一个 Helm 包 | helm install my-release stable/mysql |
helm upgrade | 升级已安装的 Helm 包 | helm upgrade my-release stable/mysql |
helm uninstall | 卸载一个已安装的 Helm 包 | helm uninstall my-release |
helm list | 列出已安装的 Helm 包 | helm list |
helm status | 显示已安装的 Helm 包的状态 | helm status my-release |
helm rollback | 回滚到先前的 Helm 包版本 | helm rollback my-release 1 |
helm search | 搜索可用的 Helm 包 | helm search repo mysql |
helm repo add | 添加一个 Helm 仓库 | helm repo add stable https://charts.helm.sh/stable |
helm repo update | 更新已添加的 Helm 仓库 | helm repo update |
helm repo list | 列出已添加的 Helm 仓库 | helm repo list |
helm dependency update | 更新 Helm 依赖 | helm dependency update my-chart |
helm lint | 检查 Helm Chart 的语法和最佳实践 | helm lint my-chart |
helm template | 生成 Helm Chart 的模板文件 | helm template my-chart |
helm history | 显示已安装 Helm 包的历史版本 | helm history my-release |
helm plugin install | 安装 Helm 插件 | helm plugin install https://example.com/helm-plugin.tar.gz |
helm plugin list | 列出已安装的 Helm 插件 | helm plugin list |
helm plugin uninstall | 卸载已安装的 Helm 插件 | helm plugin uninstall my-plugin |
helm env | 显示 Helm 的环境变量信息 | helm env |
kubesphere中使用应用仓库
- 创建企业空间
- 进入企业空间添加应用仓库
- 创建项目
- 进入项目部署应用
- 选择应用仓库
- 点击nacos,选择nacos版本,点击下一步
- 修改values.yaml
mysql:
enabled: true # 是否启用内部mysql,false使用外部需配置external
external:
mysqlMasterHost: "mysql_master_host"
mysqlDatabase: "nacos"
mysqlMasterPort: "3306"
mysqlMasterUser: "nacos"
mysqlMasterPassword: "nacos"
mysqlSlaveHost: "mysql_slave_host"
mysqlSlavePort: "3306"
architecture: replication
auth: # 修改nacos
rootPassword: "nacos"
database: "nacos"
username: "nacos"
password: "nacos"
replicationUser: "replicator"
replicationPassword: "replicator"
- 查看应用列表
- 点击应用查看部署详情
- 服务暴露情况
- 访问测试