k8s学习笔记

1.k8s的作用优势

自我修复
滚动更新
服务发现和负载均衡
存储编排
水平扩展

2.核心组件

2.1 k8smaster节点组件

  • kube-apiserver

负责接收客户端操作请求、认证授权
负责与etcd数据库交互
负责接收工作节点的注册请求

  • kuber-scheduler 调度器

选择一个合适的工作节点来运行容器

  • kube-controller-manager 控制器管理器

负责管理k8s集群内部中所有的控制器的(有状态、无状态等)

2.2 k8snode节点组件

  • 容器管理引擎

可以是docker, containerd
k8s从1.25版后弃用docker,改用containerd,性能效率考虑

  • kubelet

负责调用工作节点的容器引擎进行容器的整个生命周期管理
向api server发送注册请求

  • kube-proxy

负责服务发布、负载均衡(调用lvs)

3.创建容器的流程

  1. 用户通过客户端工具向api server组件发送创建pod的请求
  2. api server接收到该请求后,会将请求信息(pod名称、镜像、卷、网络等信息)记录到etcd数据库
  3. scheduler组件会周期性的请求api server,以询问是否有操作请求; api server组件查询etcd数据库响应scheduler组件,scheduler组件会得知存在创建pod的请求
  4. scheduler按一定的算法选择一个合适的node节点计划创建Pod, 并将选定的节点信息返回给api server;api server会将该node节点要与创建的pod对应关系写入etcd数据库
  5. kublet组件启动后,会先api server注册自己,以让api server得知有运行起kublet服务的node节点的存在,并将node节点信息记录到etcd数据库;这样scheduler组件才可以根据数据库的记录选择合适的节点创建pod
  6. kubelet组件也会周期性的请求api server, 以询问是否有自己要做的操作,api server查询数据库响应kubelet, kubelet获知到要创建的pod的信息后,调用container engine创建容器
  7. 容器创建完成后,为便于访问,由kube-proxy提供负载均衡

4.部署流程

时间同步、关闭防火墙、主机免密、主机名解析、所有主机关闭swap、修改主机内核参数
安装依赖、docker-ce、containerd、kubeadm、kubectl、kubelet
配置crictl客户端工具
在Master节点创建集群初始化文件
containerd导入的镜像在k8s.io命名空间
定义KUBECONFIG环境变量
部署calico打通容器网络通信

5.kubernetes-pod

  • k8s集群所能管理的最小单元
  • 一个pod只放一个容器,pod相当于装容器的箱子
  • 支持一个pod放多个容器,不建议实际使用
  • 底层设计:k8s会使用pause镜像自动创建一个管理容器,用于容器的管理操作(IP,持久化等)
    pause:k8s在吧容器建立在pod的时候还会自动建立一个容器,用的镜像就是pause这个镜像,有这个容器k8s才能做持 久化,ip等

5.1 pod命令

kubectl create -f xxx.yaml
创建容器
kubectl get pod -n (命名空间) -o wide
查看pod详细信息
kubectl get pod -A
查看所有pod
crictl ps -a 
查看创建的容器信息
kubectl describe pod xx -n xx
查看pod创建过程,排错
kubectl logs xx -n xx
查看日志
kubectl exec -ti xx -n xx bash
连接登录
kubectl cp (物理机文件) xx:/(容器下路径) -n xx
物理机、pod间拷贝文件

5.2 pod常用选项

apiVersion: v1                              指定api server版本,目前是v1
kind: Pod								    类型
metadata:                                   指定Pod的元数据信息 
  name: web_db                              容器名称
  namespace: web							命名空间
spec:                                       定义pod中运行的容器的具体信息
  containers:
  - name: mysql
    image: mysql:8.0                        指定镜像名称
    imagePullPolicy: IfNotPresent           指定镜像下载策略[Always|IfNotPresent|Never]
    resources:                              资源限制
      limits:
        cpu: "2"
        memory: "4Gi"
      requests:
        cpu: "1"
        memory: "2Gi"
    readinessProbe:
      exec:
        command:                              指定容器自动执行的命令
        - mysqladmin
        - ping
      initialDelaySeconds: 5
      periodSeconds: 2
# command:
#  - sleep
# args:     指定命令参数
# - "3600"
 
# ports:     指定容器服务端口
#  - containerPort: 80

# env:  传递环境变量
#  - name: 变量名称
#  value: 值 

# restartPolicy [ Always | Never | OnFailure ]  容器重启策略:无状态可用

5.3 pod健康状态检测机制

livenessprobe
检测pod是否正常启动

readnessprobe
检测pod是否能正常接收请求

httpGet
发送http请求,检测状态码200-400间,说明服务健康,否则不健康

        readinessProbe:
          httpGet:
            path: /test
            port: 80
            scheme: HTTP
          initialDelaySeconds: 10			// 延迟时间
          periodSeconds: 10						// 周期,频率
          successThreshold: 3					// 故障后恢复的检测次数
          timeoutSeconds: 1						// 超时时间

tcpSocket
针对所有tcp服务

        livenessProbe:
          tcpSocket:
            port: 6379
          initialDelaySeconds: 10			// 延迟时间
          periodSeconds: 10						// 周期,频率
          successThreshold: 3					// 故障后恢复的检测次数
          timeoutSeconds: 1						// 超时时间

exec
执行shell命令,判断命令的状态码

        readinessProbe:
          exec:
            - rpm 
            - -q
            - httpd
          initialDelaySeconds: 10			// 延迟时间
          periodSeconds: 10						// 周期,频率
          successThreshold: 3					// 故障后恢复的检测次数
          timeoutSeconds: 1						// 超时时间

6.kubernetes-deployment无状态负载

一种特殊的pod

优势:
1、支持副本自动维护
2、支持滚动更新

应用场景: 频繁更新的业务

deployment创建流程:
deployment -----> RS(副本集) -----> POD

  • 标签选择器(K8s所有资源建立关系的时候都是用标签来联系)
  • 每种资源都会有对应的标签,标签的实际体现是键值对的数据
  • 利用标签在RS副本集、POD之间映射关系
    标签选择器:
    标签,就是个key:value对的数据
    通过标签在RS和POD间建立对应关系

6.1 创建deployment

apiVersion: apps/v1
kind: Deployment
metadata:
    name: test1-deploy    ###给无状态负载本身起名称
spec:
    replicas: 6            ##指定pod副本数
    selector:                ###给副本集指定标签
         matchLabels:        ###给副本集指定标签
             app: centos7   ###给副本集指定标签
    template:               ###给pod指定标签的
        metadata:            ###给pod指定标签的   
            labels:          ###给pod指定标签的
                app: centos7    标签名
        spec:               ###下面写真正的容器信息
            containers:
            - name: test1
              image: centos:7
              imagePullPolicy: IfNotPresent
              command:
              - sleep
              - "3600"
kubectl get deploy          查看无状态负载
kubectl get rs              查看rs副本集
kubectl get nodes --show-labels    查看pod标签
kubectl describe deploy nginx   查看无状态本身的描述信息

添加滚动更新的参数

apiVersion: apps/v1
kind: Deployment
metadata:
    name: test2-nginx
spec:
    replicas: 6
    selector:
         matchLabels:
             app: nginx
    strategy:          
        type: RollingUpdate   //更新类型
        rollingUpdate:         
            maxSurge: 2   //一次更新几个,用来定义每次更新的比例,可以是数字也可以是百分比
            maxUnavailable: 3   //最大不活跃数量,如果超过3个pod更新失败,则整个更新失败,自动回滚
    template:
        metadata:
            labels:
                app: nginx
        spec:
            containers:
            - name: test2-nginx
              image: nginx:1.16
              imagePullPolicy: IfNotPresent
              ports:
              - containerPort: 80
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值