K8s(2)-部署应用
一旦运行了Kubernetes集群,就可以在其上部署容器化应用程序。为此,您需要创建Kubernetes Deployment配置。Deployment指示Kubernetes如何创建和更新应用程序的实例。创建Deployment后,Kubernetes调度组件将应用程序实例提到集群中的各个节点上。
创建应用程序实例后,Kubernetes Deployment Controller会持续监视这些实例。如果托管实例的节点关闭或被删除,则Deployment控制器会替换它。这提供了一种自我修复机制来解决机器故障或维护问题。
1. 检查kubectl配置是否正常
1 2 3 | [root@master ~] # kubectl version Client Version: version.Info{Major: "1" , Minor: "13" , GitVersion: "v1.13.2" , GitCommit: "cff46ab41ff0bb44d8584413b598ad8360ec1def" , GitTreeState: "clean" , BuildDate: "2019-01-10T23:35:51Z" , GoVersion: "go1.11.4" , Compiler: "gc" , Platform: "linux/amd64" } Server Version: version.Info{Major: "1" , Minor: "13" , GitVersion: "v1.13.2" , GitCommit: "cff46ab41ff0bb44d8584413b598ad8360ec1def" , GitTreeState: "clean" , BuildDate: "2019-01-10T23:28:14Z" , GoVersion: "go1.11.4" , Compiler: "gc" , Platform: "linux/amd64" } |
2. 查看集群中工作节点
这里只有一个控制节点作为工作节点,注意要去掉控制节点的污点。
1 2 3 | [root@master ~] # kubectl get nodes NAME STATUS ROLES AGE VERSION master Ready master 2d8h v1.13.2 |
3. 部署应用
通过创建一个部署(deployment),部署一个应用
1 2 3 | [root@master ~] # kubectl run kubernetes-bootcamp --image=jocatalin/kubernetes-bootcamp:v1 --port=8080 kubectl run --generator=deployment /apps .v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod /v1 or kubectl create instead. deployment.apps /kubernetes-bootcamp created |
- 部署的名字: kubernetes-bootcamp
- 镜像地址: jocatalin/kubernetes-bootcamp:v1
- Pod的端口: 8080
这个操作会在后台进行下面的动作:
- 寻找一个合适的节点能够运行应用实例
- 调度该节点运行应用程序
- 当需要时,重新分配一个节点运行程序
4. 查看部署
我们看到有1个部署正在运行应用程序的单个实例
1 2 3 | [root@master ~] # kubectl get deployments NAME READY UP-TO-DATE AVAILABLE AGE kubernetes-bootcamp 1 /1 1 1 26m |
5. 访问应用
Pods运行在k8s的内部网络,他们能够被同一个集群的Pods访问,但是不能被外部网络访问。
kubectl命令可以创建一个代理,将通信转发到集群范围的专用网络中。代理可以通过按control-c终止,并且在运行时不会显示任何输出。
我们将打开第二个终端窗口来运行代理。
1 2 | [root@master ~] # kubectl proxy Starting to serve on [::]:8001 |
api服务器将根据pod名称自动为每个pod创建一个端点,该端点也可以通过代理访问。
首先,我们需要获取pod名称,然后将其存储在环境变量pod_name中:
1 2 | export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}' ) echo Name of the Pod: $POD_NAME |
通过pod的名称访问应用
1 2 | [root@master ~] # curl http://localhost:8001/api/v1/namespaces/default/pods/$POD_NAME/proxy/ Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-7f56b875dc-6zbjt | v =1 |
分类:
Kubernetes
标签:
Kubernetes
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
2016-01-25 Websphere停止服务不用输入账号密码