- k8s安装kubeadm
kubelet:运行在cluster所有节点上,负责启动POD和容器
kubeadm:用于初始化cluster
kubectl:kubectl是kubenetes命令行工具,通过kubectl可以部署和管理应用,查看各种资源,创建,删除和更新组件
k8s核心:
Controller
Controller是在集群上管理和运行容器的对象,Controller是实际存在的,Pod是虚拟机的
Pod和Controller的关系
Pod是通过Controller实现应用的运维,比如弹性伸缩,滚动升级等
Pod 和 Controller之间是通过label标签来建立关系,同时Controller又被称为控制器工作负载
Deployment
- 定义一组Pod副本数目,版本等
- 通过控制器【Controller】维持Pod数目【自动回复失败的Pod】
- 通过控制器以指定的策略控制版本【滚动升级、回滚等】
Service
- 定义一组pod的访问规则,提供了服务发现与负载均衡的功能。
- Pod 和 Service 之间还是根据 label 和 selector 建立关联的 【和Controller一样】
- Pod的负载均衡,提供一个或多个Pod的稳定访问地址
- 支持多种方式【ClusterIP、NodePort、LoadBalancer】
- Service常用类型有三种
- ClusterIp:集群内部访问
- NodePort:对外访问应用使用
- LoadBalancer:对外访问应用使用,公有云。
Secret
Secret的主要作用就是加密数据,然后存在etcd里面,让Pod容器以挂载Volume方式进行访问
ConfigMap
ConfigMap作用是存储不加密的数据到etcd中,让Pod以变量或数据卷Volume挂载到容器中
Ingress
对外提供访问的服务,pod 和 ingress 是通过service进行关联的,而ingress作为统一入口,由service关联一组pod中
Helm
Helm是一个Kubernetes的包管理工具,就像Linux下的包管理器,如yum/apt等,可以很方便的将之前打包好的yaml文件部署到kubernetes上。
持久化存储:
nfs:网络存储【通过一台服务器来存储】
- 找一台新的服务器nfs服务端,安装nfs
- 设置挂载路径
常用操作命令:
# 下载nginx 【会联网拉取nginx镜像】
kubectl create deployment nginx --image=nginx
# 查看状态
kubectl get pod
# 暴露端口
kubectl expose deployment nginx --port=80 --type=NodePort
# 查看一下对外的端口
kubectl get pod,svc
#查看pod分配节点
kubectl get pods -o wide
#获取已有镜像的ymal
kubectl get deploy jupytergateway-sample -o=yaml >nginx2.ymal
#尝试创建镜像 生成ymal
kubectl create deployment web --image=nginx --dry-run -o yaml > nginx.yaml
#导出配置文件
kubectl expose deployment web --port=80 --type=NodePort --target-port=80 --name=web1 -o yaml > web1.yaml
#制定ymal创建镜像
kubectl apply -f nginx.yaml
#应用升级
kubectl set image deployment web nginx=nginx:1.15
#升级状态
kubectl rollout status deployment web
#回滚
kubectl rollout undo deployment web --to-revision=2
#弹性伸缩
kubectl scale deployment web --replicas=10
pod特性:
pod重启机制
RestartPolicy:Never
重启策略主要分为以下三种
- Always:当容器终止退出后,总是重启容器,默认策略 【nginx等,需要不断提供服务】
- OnFailure:当容器异常退出(退出状态码非0)时,才重启容器。
- Never:当容器终止退出,从不重启容器 【批量任务】
pod健康检查:
# 存活检查,如果检查失败,将杀死容器,根据Pod的restartPolicy【重启策略】来操作
livenessProbe
# 就绪检查,如果检查失败,Kubernetes会把Pod从Service endpoints中剔除
readinessProbe
Probe支持以下三种检查方式
- http Get:发送HTTP请求,返回200 - 400 范围状态码为成功
- exec:执行Shell命令返回状态码是0为成功
- tcpSocket:发起TCP Socket建立成功
影响Pod调度的属性
- Pod资源限制对Pod的调度会有影响
- 节点选择器标签影响Pod调度:nodeSelector
kubectl label node node1 env_role=prod - 节点亲和性:nodeAffinity
- 污点和污点容忍
污点值有三个
- NoSchedule:一定不被调度
- PreferNoSchedule:尽量不被调度【也有被调度的几率】
- NoExecute:不会调度,并且还会驱逐Node已有Pod
使用Rancher2.0搭建Kubernetes集群