K8S和容器化编排

K8S和容器化编排

第一章:快速入门 相关

xxx(minikube) start 启动集群
kubectl get nodes 查看节点的集群
kubectl version 查看集群的状态
kubectl create deployment kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1
创建一个部署deployment 应用名 镜像地址

Deployment是Kubernetes的术语,可以理解为应用。
同时deployment管理Pods的创建和扩展。这个抽象的概念也是为了方便管理pod,也是一个controller,来管理pod
kubectl get deployments 查看deployments列表信息

Pod是容器的集合,通常会将紧密相关的一组容器放到一个Pod中,同一个Pod中的所有容器共享IP地址和Port空间,也就是说它们在一个network namespace中。

kubectl proxy  给pod创建代理端口

kubectl get pods  查看当前的Pod

pod往往运行在具体的node中,node在k8s中就是具体的物理机或者虚机,然后其中会有一个node对象,通过master进行控制;一个node可以有多个pod,取决于node自身资源的限制大小。
master控制node,通过kubelet组件的方式。

kubectl describe pods

描述查看pod内部的container情况。 describe也可以用来展示demployments,node,service等信息

暴露端口-外部访问应用
export POD_NAME=$(kubectl get pods -o go-template --template ‘{ {range.items}}{ {.metadata.name}}{ {"\n"}}{ {end}}’)
echo $POD_NAME
kubectl expose deployment/kubernetes-bootcamp --type=“NodePort” --port 8080 将Deployment暴露为外部可访问的服务

curl http://localhost:8001/api/v1/namespaces/default/pods/$POD_NAME/proxy/
访问对应pod的API

kubectl exec $POD_NAME env 在容器中执行命令,进入到pod中,使用pod的name作为参数:含义 访问对应pod的环境变量
kubectl exec -ti $POD_NAME curl  localhost:8080  进入到POD中执行curl localhost:8080 的命令
kubectl exec -it my-pod --container main-app -- /bin/bash   打开到main-app的shell的容器里

Kubernetes Services:
一种抽象,协调逻辑pod和访问他们的策略,服务所针对的pod集通常由LabelSelector确定。
type in the ServiceSpec:
ClusterIP ,NodePort,LoadBalancer,ExternalName

k8s的控制器
1、ReplicationController
2、ReplicaSet
3、Deployment
4、StatefulSet
5、DaemonSet
6、Job,Cronjob
7、HPA(HorizontalPodAutoscaler)

总体上来说,Kubernetes中拥有三种类型的controller:
Job:通常用于管理一定会结束的Pod。如果希望Pod被Job controller管理,那么restartPolicy必须指定为OnFailure或Never。
ReplicationController,ReplicaSet和Deployment:用于管理永远处于运行状态的Pod。
	如果希望Pod被此类controller管理,那么restartPolicy必须指定为Always。
DaemonSet:它能够保证你的Pod在每一台Node都运行一个副本。

虽然也 ReplicaSet 可以独立使用,但建议使用 Deployment 来自动管理 ReplicaSet,这样就无需担心跟其他机制的不兼容问题(比如 ReplicaSet 不支持 rolling-update 但 Deployment 支持),并且Deployment还支持版本记录、回滚、暂停升级等高级特性

yaml描述文件:
apiVersion: apps/v1
kind: StatefulSet
metadata:
spec:
status:

kubectl get deployments 查看应用部署的信息
kubectl get pods -l run=kubernetes-bootcamp 查询到labels下values值为 run=kubernetes-bootcam 的pod
kubectl get services -l run=kubernetes-bootcamp 查询道Labels下的值为 run=kubernetes-bootcamp 的service

kubectl delete service -l run=kubernetes-bootcamp 删除一个Labels下的值为run=kubernetes-bootcamp的service

kubectl get rs 查看由Deployment创建的复制集(查看系统中ReplicaSet对象)

扩容服务命令:
kubectl scale deployments/kubernetes-bootcamp --replicas=4 将名字是kubernetes-bootcamp的deployments 的复制集(副本)扩成4个。

kubectl get pods -o wide 查看现有的pods的所有完整信息

export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template=’{ {(index .spec.ports 0).nodePort}}’)
将端口号输出为环境变量

滚动更新镜像:
kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2
kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=gcr.io/google-samples/kubernetes-bootcamp:v10
查看集群服务信息:
kubectl describe services/kubernetes-bootcamp

Rollout命令来确认部署应用更新的状态
kubectl rollout status deployments/kubernetes-bootcamp

Rollback an update(更新回滚)出现更新错误 就可以执行往上一个版本回滚的命令
kubectl rollout undo deployments/kubernetes-bootcamp

总结:
通过一些官方的交互文档,大概了解了一些k8s概念上的东西,知道Master管控着NODE,同时下面有Deployment等控制器对象去控制ReplicaSet和Pod的生成和管理
一些快速查看集群部署和POD状态和命令。

资源限制 

Kubernetes 通过 cgroups 提供容器资源管理的功能,可以限制每个容器的 CPU 和内存 使用,比如对于刚才创建的 deployment,可以通过下面的命令限制 nginx 容器最多只用 50% 的 CPU 和 128MB 的内存,
		apiVersion: v1 
		kind: Pod 
		metadata: 
			labels: app: nginx 
			name: nginx 
		spec: 
			containers: 
				- image: nginx 
				  name: nginx 
				resources: 
					limits: 
						cpu: "500m" 
						memory: "128Mi"

第二章 重要概念

Cluster(集群):
	Cluster是计算、存储和网络资源的集合,Kubernetes利用这些资源运行各种基于容器的应用。

Master(主机):
	Master是Cluster的大脑,它的主要职责是调度,即决定将应用放在哪里运行。Master运行Linux操作系统,可以是物理机或者虚拟机。为了实现高可用,可以运行多个Master。

Node(节点):
	Node的职责是运行容器应用。Node由Master管理,Node负责监控并汇报容器的状态,同时根据Master的要求管理容器的生命周期。Node运行在Linux操作系统上,可以是物理机或者是虚拟机。

Pod(工作单元):
	Pod是Kubernetes的最小工作单元。每个Pod包含一个或多个容器。Pod中的容器会作为一个整体被Master调度到一个Node上运行。
	一个Pod只会在一个Node上运行。
	引入Pod主要基于下面两个目的:
		1)可管理性:有些容器天生就是需要紧密联系,一起工作。Pod提供了比容器更高层次的抽象,将它们封装到一个部署单元中。Kubernetes以Pod为最小单位进行调度、扩展、共享资源、管理生命周期。
		2)通信和资源共享:Pod中的所有容器使用同一个网络namespace,即相同的IP地址和Port空间。它们可以直接用localhost通信。同样的,这些容器可以共享存储,当Kubernetes挂载volume到Pod,
		本质上是将volume挂载到Pod中的每一个容器
	Pods有两种使用方式:
		1)运行单一容器:one-container-per-Pod是Kubernetes最常见的模型,这种情况下,只是将单个容器简单封装成Pod。即便是只有一个容器,Kubernetes管理的也是Pod而不是直接管理容器。
		2)运行多个容器:问题在于:哪些容器应该放到一个Pod中?答案是:这些容器联系必须非常紧密,而且需要直接共享资源。

Controller(控制器):
	Kubernetes(K8S)通常不会直接创建Pod,而是通过Controller来管理Pod的。Controller中定义了Pod的部署特性,比如有几个副本、在什么样的Node上运行等。为了满足不同的业务场景,
	Kubernetes提供了多种Controller,包括Deployment、ReplicaSet、DaemonSet、StatefuleSet、Job等,逐一解释讨论:
	(1)Deployment是最常用的Controller,比如在线教程中就是通过创建Deployment来部署应用的。Deployment可以管理Pod的多个副本,并确保Pod按照期望的状态运行。
	(2)ReplicaSet实现了Pod的多副本管理。使用Deployment时会自动创建ReplicaSet,也就是说Deployment是通过ReplicaSet来管理Pod的多个副本的,我们通常不需要直接使用ReplicaSet。
	(3)DaemonSet用于每个Node最多只运行一个Pod副本的场景。正如其名称所揭示的,DaemonSet通常用于运行daemon。
	(4)StatefuleSet能够保证Pod的每个副本在整个生命周期中名称是不变的,而其他Controller不提供这个功能。当某个Pod发生故障需要删除并重新启动时,Pod的名称会发生变化
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值