1. 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集群