k8s-某视频课基础了解

容器编排   Kubernetes Helm
容器引擎  Containerd Rocket
容器镜像仓库  TUF Harbor Notarv
容器网络CNI
服务网格&服务发现  CoreDNS   Linkerd  Envoy
容器监控运维  Prometheus Fluentd  Jaeger  QpenTracing
K8S南向-多样化的环境: 
	容器、网络、存储插件;镜像仓库;多云插件;集群管理配置;认证系统
K8S北向-多样化的服务和工具:
	日志&监控、-配置语言、编排部署、持续集成、Paas、工作流、函数服务、数据处理服务、-对象事务服务(数据库、存储)、互联网应用

组件

Master节点:负责整个集群的管理和控制
- etcd
- kube-apiserver
- kube-controller-manager
- kube-scheduler

Node节点:
- kubelet
- kube-proxy
- docker.cni插件
Kubelet manifest部署控制节点组件,system 安装kubelet,其他组件manifest方式拉起
Liveness、readiness配置组件健康检查
kubeadm init --pod-network-cidr=10.244.0.0/16
初始化完成会自动拉取镜像,初始化配置,节点加入的命令等等
(--dry-run >init.yaml ???)

生成kubecfg文件
...
[kubeconfig] Mrote KubeConfig file to disk: "/etc/kubernetes/admin.conf"
[kubeconfig] wrote KubeConfig file to disk: "/etc/kubernetes/kubelet.conf"
[kubeconfig] wrote KubeConfig file to disk: "/etc/kubernetes/controller-manager"
[kubeconfig] wrote KubeConfig file to disk: "/etc/kubernetes/scheduler.conf"

[controlplane] wrote Static Pod manifest for component kube-apiserver to "/etc/kubernetes/manifests/kube-apiserver.yaml"

监听/etc/kubernetes/mainfests目录(自动生成的目录及文件),你也可以写一些资源文件放进去,集群会自动拉起放进去的配置文件
cat /var/lib/kubelet/config.yaml 里staticPodPath项 定义了这个路径
root@ecs-master:# ls /etc/ kubernetes/manifests   #这里的yaml就是定义的pod的资源信息
etcd.yaml kube-apiserver.yaml kube-controller-manager.yaml kube-scheduler.yaml

API SERVER

/api/v1  核心API
/healthz  健康检查
/logs   日志
/ui   Dashboard
/swaggerapi   OpenAPI
/metrics   性能度量

集群升级流程

控制节点滚动升级:升级kubelet,通过更新manifest升级控制组件
计算节点升级:kubectl drain --ignore-daemonsets=true 10.10.11.12 (驱逐,并cordon) 
           kubectl uncordon 10.10.11.12
容器分类
Infrastructure Container:基础容器  用户不可见,无需感知  维护整个Pod网络空间
InitContainers:初始化容器,一般用于服务等待处理以及注册Pod信息等.先于业务容器开始执行、顺序执行,执行成功退出 (exit 0 ),全部执行成功后开始启动业务容器
Containers :业务容器 并行启动,启动成功后一直Running
镜像部分:镜像地址和拉取策略 拉取镜像的认证凭据spec.imagepullsercret -name:  serret名字
计算资源:  请求值:调度依据。 限制值︰容器最大能使用的规格
健康检查:分命令行方式、httpGet请求方式以及TCPSocket三种方式
业务探针(readinessProbe) ·探测不正常后,不会重启容器,只会拿掉服务后端的endpoints
存活探针(LivenessProbe)  探测不正常后,会重启容器

Pod可以接收的外部输入方式:环境变量、配置文件以及密钥。

环境变量:使用简单,但一旦变更后必须重启容器。 Key-value自定义
From配置文件(configmap)、From密钥(Secret)以卷形式挂载到容器内使用,权限可控。

域名解析的策略

dnsPolicy : Pod内域名解析的策略
ClusterFirst:使用kube-dns作为域名解析服务器
Default:使用节点( kubelet)指定的域名服务器解析域名
ClusterFirstWithHostNet : 当Pod使用主机网络部署时使用
用户可自定义资源类型,可扩展行强∶ 需实现自己的controller进行自定义资源的管理,高段位使用
kind: CustomResourceDefinition
通过label-selector相关联,通过服务实现Pod的负载均衡能力:
Service:实现TCP/UDP 4层负载均衡能力
Ingress:实现HTTP7层负载均衡能力

LoadBalancer类型Service

prot		service的服务端口
clusterip   vip,service的IP,服务将通过这个clusterip,轮询转发给后端的pod ip,如果你不想要这种轮询效果,你可以将它写成none,这样就成了headless服务
targetport  容器端口
endpoints   创建service时,自动创建出的,endpoints-controller会根据pod的readness探测,增删里面的pod ip。
nodeport    对外发布服务,任意节点的ip:端口,都可以访问到服务,不对外发布可以不定义
同时是Cluster Ip类型,需要跑在特定的cloud provider上
- Service Controller自动创建一个外部LB并配置安全组
-对集群内访问, kube-proxy用iptables或pvs实现了云服务提供商LB的部分功能: L4转发。安全组规则等。

kind: Service
apiVersion: v1
metadata:
  name: my-service
spec:
  selector:
    app: MyApp
  ports:
  - protocol: TCP
    port: 80
    targetPort: 9376
  cluxterlP: 10.0.171.239
  loadBalancerP.78.1124.19   #外部LB-IP
  type:LoadBalancer

Ingress

Ingress是授权入站连接到达集群服务的规则集合
-支持通过URL方式将Service暴露到K8S集群外,Service之上的7访问入口
-支持自定义Service的访问策略
-提供按域名访问的虚拟主机功能
-支持TLS

普通存储卷(volume)

容器启动时依赖数据  configmap、 secret
临时数据存储 emptyDir、hostPath
持久化数据存储: nfs、cephfs、GlutserFS 、Cloud
存储没有单独资源对象,与Pod的生命周期一起

持久化存储卷(PersistentVolume)

Provisioning : PV的预制创建有两种模式:静态模式和动态模式
静态模式:除创建PVC外,还需手动创建PV
动态模式:创建PVC外,系统跟库PVC自动创建PV

认证(Authentication)和鉴权(Authorization)

认证支持多种方式,其中一种认证方式认证通过即通过,输出userinfo
基于认证输出的userinfo进行鉴权,鉴权也支持多种方式,常用方式为RBAC

认证(Authentication)

认证方式有:X509、service account、Authenticating Proxy、WebHook、username/password...
常用认证方式介绍:
X509:
- Kube-apiserver的启动参数'一client-ca-file=ca.crt'指定X509根证书,请求中需带有由该根证书签名的证书,才能认证通过
- 客户端签署的证书里包含user、group信息,具体为证书的subject.CommonName
(user name)以及subject.Organization (group)
Service Account(为k8s必选认证方式):
- Kube-apiserver的启动参数'--service-account-key-file=key.pem'指定pem文件,用以生成。bearer token; '--service-account-lookup=true/false'表示在删除service account后其token是否被吊销
- Serviceaccount Admission默认给Pod打上service account,当然用户也可以自行指定所需要的service account
安全的持久化保存键值(etcd )
etcd支持备份恢复机制,防止数据被误删导致数据丢失
用户的敏感信息建议存放在secret类型的资源中,该类型资源是加密存储在etcd中
etcd支持https , kube-apiserver访问etcd使用https协议

安全上下文(Pod SecurityContext )

分为Pod级别和容器级别,容器级别的会覆盖Pod级别的相同设置。
在有PodSecurityPolicy策略的情况下,两者需要配合使用。


是否使用特权容器 	 privileged: false
指定容器启动UID		runAsUser: 1000
指定Pod中容器文件所属组GID	fsGroup:2000
容器的文件系统是否是只读   readOnlyRootFilesystem: false
容器系统调用能力配置    capabilities: 

Network Policy

分为Ingress和Egress策略控制,都为白名单。Ingress为入口请求控制,Egress为出口请求控制。

细节多学习Network Policy

资源调度

资源调度依据     pod的requests:
执行调度的调度器  schedulerName: default-scheduler
调度结果   		nodeName: node1   #创建Pod时直接指定nodeName
高级调度策略     nodeselector:  affinity:  tolerations: 
Pod所需资源的计算:最终取以下两者中的极大值
InitContainers :
逐个运行并退出,之后才拉起containers资源需求取单个容器的最大值
Containers :
同时运行,资源需求为所有容器累加

高级调度策略 nodeselector 将 Pod调度到特定的Node 上

匹配node.labels,排除不包含nodeSelector中指定label的所有node,匹配机制:完全匹配

nodeAffinity : nodeSelector 升级版

与nodeSelector关键差异
引入运算符:In, Notin ( labelselectot语法)
支持枚举label可能的取值,如zone in [az1, az2, a3..]
支持硬性过滤和软性评分
硬性过滤规则支持指定多条件之间的逻辑或运算
软性评分规则支持设置条件权重值

硬性过滤: 排除不吴备指定label的node
软性评分: 不具备指定label的node打低分,降低node被选中的几率

podAffinity:让某些Pod分布在同一组Node 上

与nodeAffinity的关键差异
-定义在PodSpec中,亲和与反亲和规则具有对称性
-labelSelector的匹配对象为Pod
-对node分组,依据label-key = topologyKey,每个label-value取值为一组
硬性过滤规则,条件间只有逻辑与运算

硬性过滤: 排除不具备指定pod的node组
软性评分: 不具备指定pod的node组打低分.降低该组node被选中的几率
podAntiAffinity:避免某些Pod分布在同一组 Node 上
与podAffinity的差异
-匹配过程相同
-最终处理调度结果时取反
即
podAffinity中可调度节点,在podAntiAffinity中为不可调度
podAffinity中高分节点,在podAntiAffinity中为低分

Taints:避免Pod调度到特定Node 上

带effect的特殊label,对Pod有排斥性:硬性排斥NoSchedule 、软性排斥PreferNoSchedule
系统创建的taint附带时间戳-effect为NoExecute,便于触发对Pod的超时驱逐。用法:预留特殊节点做特殊用途

kubect1 taint node node-n1 foo=bar:NoSchedule    #给node添加taint
kubect1 taint node node-n1 foo:NoSchedule-     #删除taint

Tolerations:允许Pod调度到有特定taints的 Node上

多调度器 使用scheduleName指定调度器

适用场景: 集群中存在多个调度器,分别处理不同类型的作业调度
使用限制: 建议对node做资源池划分,避免调度结果写入冲突

自定义调度器配置

--policy-config-file自定义调度器加载的算法,或者调整排序算法权重
执行kube-scheduler --help查看更多调度器配置项

Annotations

顾名思义,就是注释的意思。有两个功能:

  • 注释性信息,不影响调度,主要是后台用于查询的。类似于label,但没有label使用度高
  • 工具和库等客户端可以检索Annotation数据
一、为什么学习kubernetes众所周知,随着容器的快速发展,容器管理工具kubernetes也应运而生,目前不仅百度、京东、阿里、google等大公司在使用kubernetes,一些中小企业也开始把业务迁移到kubernetes,那么作为运维、开发、测试或者架构师来说,必须要掌握这项技术,才能提现我们的工作价值,才能在行业具备保持较高的技术水平,kubernetes作为成熟的容器编排工具,具有容器集群的自动化部署、自动化伸缩和故障自恢复的能力,让容器的部署和管理变得更加容易,能够给企业和提供一个智能化的容器云管理平台,为企业快速上云提供一个安全可靠的解决方案,此程主要介绍kubernetes1.14/kubernetes1.15版本高可用集群的安装部署和使用,通过我多年工作经验总结,带你深入体验企业实战案例,让您轻松快速的掌握k8s,接下来让我们一起出发吧。 二、程亮点 三、讲师简介 先超(lucky):高级运维工程师、资深DevOps工程师,在互联网上市公司拥有多年一线运维经验,主导过亿级pv项目的架构设计和运维工作 主要研究方向: 1.云计算方向:容器kubernetesdocker),虚拟化(kvm、Vmware vSphere),微服务(istio),PaaS(openshift),IaaS(openstack)等2.系统/运维方向:linux系统下的常用组件(nginx,tomcat,elasticsearch,zookeeper,kafka等),DevOps(Jenkins+gitlab+sonarqube+nexus+k8s),CI/CD,监控(zabbix、prometheus、falcon)等.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值