Kubernetes
Kubernetes
安装
示例部署
部署业务应用(deployment 资源)
创建文件 deploy.yaml 如下
apiVersion: apps/v1 kind: Deployment metadata: name: myapp-deployment namespace: handson-7609b5511e618e0aebc8dcf2c96e23e6 labels: app: myapp spec: replicas: 1 # 表示当前应用只部署一份 selector: matchLabels: name: myapp template: metadata: labels: name: myapp namespace: handson-7609b5511e618e0aebc8dcf2c96e23e6 spec: containers: - name: myapp image: registry.cn-shanghai.aliyuncs.com/workbench_1459088147016887/handson_ack_test:3 # web 应用的镜像地址 ports: - containerPort: 8080部署
kubectl apply -f deploy.yaml查询已部署的 pod
kubectl get pod重启
kubectl delete pod myapp-deployment # 执行 delete pod 后将会立即重启了一个新的同类型的 pod,因为 deployment 控制 replicasSet,当副本数跟实际的不相符的时候,rs 会自动再创建新的,直到跟模板上的一致卸载
kubectl delete deployment myapp-deployment
部署服务(service 资源)
创建文件 service.yaml 如下
apiVersion: v1 kind: Service metadata: name: myapp-service namespace: handson-7609b5511e618e0aebc8dcf2c96e23e6 spec: ports: # 这里定义了服务自身暴露的端口和需要访问的应用的端口 - port: 8080 targetPort: 8080 protocol: TCP type: NodePort selector: # 这是一个选择器,通过 name=myapp 这个条件来选择需要代理的服务 name: myapp部署
kubectl apply -f service.yaml查询已部署的 service
kubectl get service卸载
kubectl delete service myapp-service
配置 ingress 开放外部访问
创建文件 ingress.yaml 如下
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: example-ingress namespace: handson-7609b5511e618e0aebc8dcf2c96e23e6 spec: rules: - http: paths: - path: /welcome backend: serviceName: myapp-service servicePort: 8080部署
kubectl apply -f ingress.yaml查询已部署的 ingress
kubectl get ingress卸载
kubectl delete ingress example-ingress
kubectl 命令
# 查看所有命名空间
kubectl get namespace
# 查看默认命名空间 default 下所有 pods
kubectl get pods
# 查看命名空间 n1 下所有 pods
kubectl get pods -n n1
# 查看当前可用的 api 版本
kubectl api-versions
# 查看命名空间 n1 下 example-ingress 的描述 yaml 文件
kubectl -n n1 get ingress -o yaml example-ingress
yaml 配置
# 必填,api 版本,可通过命令 kubectl api-versions 查询所有可选值
apiVersion: v1
# 必填,资源类别,包括:
# 资源对象 Pod、ReplicaSet、ReplicationController、Deployment、StatefulSet、DaemonSet、Job、CronJob、HorizontalPodAutoscaling
# 配置对象 Node、Namespace、Service、Secret、ConfigMap、Ingress、Label、ThirdPartyResource、ServiceAccount
# 存储对象 Volume、Persistent Volume
# 策略对象 SecurityContext、ResourceQuota、LimitRange
kind: Pod
metadata: # 必填,元数据
name: string # 必填,名称
namespace: string # 必填,所属命名空间
labels: # 自定义标签
- name: string # 自定义标签名字
annotations: # 自定义注释列表
- name: string
spec: # 必选,容器的详细定义
containers: # 必选,Pod 中容器列表
- name: string # 必选,容器名称
image: string # 必选,容器的镜像名称
imagePullPolicy: [Always | Never | IfNotPresent] # 获取镜像的策略,Alawys 表示下载镜像,IfnotPresent 表示优先使用本地镜像,否则下载镜像,Nerver 表示仅使用本地镜像
command: [string] # 容器的启动命令列表,如不指定,使用打包时使用的启动命令
args: [string] # 容器的启动命令参数列表
workingDir: string # 容器的工作目录
volumeMounts: # 挂载到容器内部的存储卷配置
- name: string # 引用 pod 定义的共享存储卷的名称,需用 volumes[] 部分定义的的卷名
mountPath: string # 存储卷在容器内 mount 的绝对路径,应少于 512 字符
readOnly: boolean # 是否为只读模式
ports: # 需要暴露的端口库号列表
- name: string # 端口号名称
containerPort: int # 容器需要监听的端口号
hostPort: int # 容器所在主机需要监听的端口号,默认与 Container 相同
protocol: string # 端口协议,支持 TCP 和 UDP,默认 TCP
env: # 容器运行前需设置的环境变量列表
- name: string # 环境变量名称
value: string # 环境变量的值
resources: # 资源限制和请求的设置
limits: # 资源限制的设置
cpu: string # Cpu 的限制,单位为 core 数,将用于 docker run --cpu-shares 参数
memory: string # 内存限制,单位可以为 Mib/Gib,将用于 docker run --memory 参数
requests: # 资源请求的设置
cpu: string # Cpu 请求,容器启动的初始可用数量
memory: string # 内存清楚,容器启动的初始可用数量
livenessProbe: # 对 Pod 内个容器健康检查的设置,当探测无响应几次后将自动重启该容器,检查方法有 exec、httpGet 和 tcpSocket,对一个容器只需设置其中一种方法即可
exec: # 对Pod容器内检查方式设置为 exec 方式
command: [string] # exec 方式需要制定的命令或脚本
httpGet: # 对 Pod 内个容器健康检查方法设置为 HttpGet,需要制定 Path、port
path: string
port: number
host: string
scheme: string
HttpHeaders:
- name: string
value: string
tcpSocket: # 对 Pod 内个容器健康检查方式设置为 tcpSocket 方式
port: number
initialDelaySeconds: 0 # 容器启动完成后首次探测的时间,单位为秒
timeoutSeconds: 0 # 对容器健康检查探测等待响应的超时时间,单位秒,默认 1 秒
periodSeconds: 0 # 对容器监控检查的定期探测时间设置,单位秒,默认 10 秒一次
successThreshold: 0
failureThreshold: 0
securityContext:
privileged: false
restartPolicy: [Always | Never | OnFailure] # Pod 的重启策略,Always 表示一旦不管以何种方式终止运行,kubelet 都将重启,OnFailure 表示只有 Pod 以非 0 退出码退出才重启,Nerver 表示不再重启该 Pod
nodeSelector: obeject # 设置 NodeSelector 表示将该 Pod 调度到包含这个 label 的 node 上,以 key: value 的格式指定
imagePullSecrets: # Pull 镜像时使用的 secret 名称,以 key: secretkey 格式指定
- name: string
hostNetwork:false # 是否使用主机网络模式,默认为 false,如果设置为 true,表示使用宿主机网络
volumes: # 在该 pod 上定义共享存储卷列表
- name: string # 共享存储卷名称(volumes 类型有很多种)
emptyDir: {} # 类型为 emtyDir 的存储卷,与Pod同生命周期的一个临时目录。为空值
hostPath: string # 类型为 hostPath 的存储卷,表示挂载 Pod 所在宿主机的目录
path: string # Pod 所在宿主机的目录,将被用于同期中 mount 的目录
secret: # 类型为 secret 的存储卷,挂载集群与定义的 secre 对象到容器内部
scretname: string
items:
- key: string
path: string
configMap: # 类型为 configMap 的存储卷,挂载预定义的 configMap 对象到容器内部
name: string
items:
- key: string
path: string