概览
K8S官网文档:https://kubernetes.io/zh/docs/home/
K8S 是Kubernetes的全称,源于希腊语,意为"舵手"或"飞行员",官方称其是:用于自动部署、扩展和管理"容器化(containerized)应用程序"的开源系统。翻译成大白话就是:"K8S 是负责自动化运维管理多个跨机器 Docker 程序的集群"。
K8S核心特性
- 服务发现与负载均衡:无需修改你的应用程序即可使用陌生的服务发现机制。
- 存储编排:自动挂载所选存储系统,包括本地存储。
- Secret和配置管理:部署更新Secrets和应用程序的配置时不必重新构建容器镜像,且不必将软件堆栈配置中的秘密信息暴露出来。
- 批量执行:除了服务之外,Kubernetes还可以管理你的批处理和CI工作负载,在期望时替换掉失效的容器。
- 水平扩缩:使用一个简单的命令、一个UI或基于CPU使用情况自动对应用程序进行扩缩。
- 自动化上线和回滚:Kubernetes会分步骤地将针对应用或其配置的更改上线,同时监视应用程序运行状况以确保你不会同时终止所有实例。
- 自动装箱:根据资源需求和其他约束自动放置容器,同时避免影响可用性。
- 自我修复:重新启动失败的容器,在节点死亡时替换并重新调度容器,杀死不响应用户定义的健康检查的容器。
K8S 快速实战
kubectl命令使用
kubectl是apiserver的客户端工具,工作在命令行下,能够连接apiserver实现各种增删改查等操作
kubectl官方使用文档:https://kubernetes.io/zh/docs/reference/kubectl/overview/
Namespace
K8s 中,命名空间(Namespace) 提供一种机制,将同一集群中的资源划分为相互隔离的组。同一命名空间内的资源名称要唯一,命名空间是用来隔离资源的,不隔离网络。
Kubernetes 启动时会创建四个初始命名空间:
- default
Kubernetes 包含这个命名空间,以便于你无需创建新的命名空间即可开始使用新集群。 - kube-node-lease
该命名空间包含用于与各个节点关联的 Lease(租约)对象。 节点租约允许 kubelet 发送心跳, 由此控制面能够检测到节点故障。 - kube-public
所有的客户端(包括未经身份验证的客户端)都可以读取该命名空间。 该命名空间主要预留为集群使用,以便某些资源需要在整个集群中可见可读。 该命名空间的公共属性只是一种约定而非要求。 - kube-system
该命名空间用于 Kubernetes 系统创建的对象。
bash
# 查看namespace、
kubectl get namespace
#查看kube-system下的pod
kubectl get pods -n kube-system
#查看所有namespace下的pod
kubectl get pods -A
创建Namesapce示例
- 命令行方式
可以使用下面的命令创建Namespace:
bash
kubectl create namespace tuling
- yaml方式
新建一个名为 my-namespace.yaml 的 YAML 文件,并写入下列内容:
bash
apiVersion: v1
kind: Namespace
metadata:
name: yuyang
然后运行:
bash
kubectl apply -f my-namespace.yaml
删除namesapce
bash
kubectl delete namespace yuyang
kubectl delete -f my-namespace.yaml
Pod
Pod 是可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元。Pod (就像在鲸鱼荚或者豌豆荚中)是一组(一个或多个)容器 ; 这些容器共享存储、网络、以及怎样运行这些容器的声明。
创建Pod示例:运行一个NGINX容器
- 命令行方式
bash
# 创建pod
kubectl run mynginx --image=nginx:1.14.2
#在指定命名空间创建pod
kubectl run mynginx --image=nginx:1.14.2 -n <namespace>
kubectl run mynginx --image=nginx:1.14.2 -n yuyang #例子
bash
# 获取pod的信息,-owide 表示更详细的显示信息 -n 命名空间 查询对应namespace下的pod
kubectl get pod
kubectl get pod -owide
kubectl get pod -owide -n <namespace-name>
#查看pod的详情
kubectl describe pod <pod-name>
kubectl describe pod <pod-name> -n <namespace-name>
# 查看Pod的运行日志
kubectl logs <pod-name>
# 删除pod
kubectl delete pod <pod-name>
kubectl describe pod
- yaml方式
bash
#vim nginx-pod.yaml
apiVersion: v1 #版本
kind: Pod #类型
metadata: #以上是默认格式
labels:
run: mynginx #标签别名
name: mynginx #pod名字
spec:
containers:
- name: nginx
image: nginx:1.14.2 #无版本号则拉取最新的
ports:
- containerPort: 80
然后运行:
bash
kubectl apply -f nginx-pod.yaml
删除pod
bash
kubectl delete -f nginx-pod.yaml
一个pod运行多个容器
bash
apiVersion: v1
kind: Pod
metadata:
labels:
run: myapp
name: myapp
spec:
containers:
- image: nginx:1.14.2
name: nginx
- image: tomcat:9.0.55