温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Kubernetes知识点有哪些

发布时间:2021-11-18 11:17:25 来源:亿速云 阅读:165 作者:iii 栏目:编程语言

这篇文章主要讲解了“Kubernetes知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Kubernetes知识点有哪些”吧!


k8s对象组件

Kubernetes知识点有哪些

Node工作节点
  • 负责应用运行(生产环境至少需要三个工作节点)

  • 单Node上可工作数个Pod

  • 运行三项关键服务

    • Kubelet:节点上的集群客户端,负责节点管理及对master通信的代理

    • Kube Proxy:维护网络以支持Service服务层

    • Container Runtime:容器运行时交互

Master管理节点
  • 负责集群调度

  • 运行关键服务

    • Kube API Server:提供Kube Api服务

    • Etcd:集群内部一致性、可用性数据存储

    • Kube Scheduler:调度Pod到合适Pod上运行

    • Kube Controller Manager

    • Kube DNS

ReplicaSet
  • 工作在master节点上,下一代的Replication Controller

  • 主要被Deployments用作pod的管理调度

Pod容器组
  • 在Node上创建,非持久化

  • 包含一组相互间可localhost通信、关系紧密的容器(共享存储卷、分配的cluster-ip、运行信息)

  • 容器应用的基本管理单元,可接受EndPoint请求

Deployment
  • 部署pod容器组,并监控管理

  • master node上Controller Manager的一部分

Service服务
  • 一组后端Pods的抽象并提供稳定的服务入口,实现集群内部服务发现+负载均衡,同时也可对外暴露服务

  • 会分配到一个cluster-ip(是个VirtualIP,ping不通)

Service对象类型

  • ClusterIP:默认方式,服务仅开放到集群内网IP(通过kube-proxy调用iptables创建规则将流量转发到pod中,直接ping不通,因为不存在绑定的实际网络设备)

  • NodePort:在集群所有woker node静态端口NAT映射到ClusterIP服务(可对外暴露服务,端口范围30000~32767)

  • LoadBalancer:在支持的云厂商上自动创建L4 LBS节点并路由到NodePort服务(可对外暴露服务)

  • ExternalName:基于CNAME机制使用字符串来开放服务

端口类别:

  • TargetPort:Pod开放的端口

  • Port:Service开放的虚拟服务端口,其对接的EndPoints为下属Pod的TargetPort

  • NodePort:service对外的公网的端口

从简单到复杂可以分成三类

  • 无状态服务:RS维护Pod,Service开放接口

  • 普通有状态服务:通过Volume和Persistent Volume实现状态保存

  • 有状态集群服务

    • 基于PV/PVC获得稳定存储

    • 基于Headless Service获得稳定网络身份

    • 序号命名规则

    • Init Container:做初始化工作的容器(可多个,顺序执行完后启动主容器)

    • Stateful Set

StatefullSet
  • 用于管理部署有状态应用

DaemonSet
  • 确保选定节点上始终有指定pod运行

Ingress
  • 作为公网访问集群后端服务的入口,是Service Nodeport等之外更高级的服务暴露模型

  • 功能包括:集群外部的L7负载均衡+服务发现、反向代理,SSL截断,虚拟主机头访问

  • 仅能在标准80/443口上暴露服务,可配置http访问规则,包括:host、path

  • 驻留在control plane节点上,不占用work node的主机端口资源

IngressController
  • 持续请求kubernetes API,实时感知后端 service、pod变化(traifik无需这步,其直接和K8S交互)

  • 结合Ingress规则刷新负载均衡器的配置,实现服务发现

Volume

基于插件形式实现,扩展性强

  • Volume:不能单独创建,非独立资源对象

    • Block Storage

    • Distributed File System

    • EmptyDir:空目录,限于Pod生命周期但超越容器(可指定磁盘或内存,可设定存储上限,类似于docker volume内部声明)

    • HostPath:挂载宿主机已有的目录,独立于Pod存在(类似于docker volume外部声明)

    • 单节点存储,基于Pod所在节点的本地目录,常用于临时数据存储或Pod内容器数据共享

    • 跨节点存储storage provider

  • Persistent Volume:可单独创建,独立资源对象

    • 静态创建:手工创建PV池供PVC绑定

    • 动态创建:基于Storage Class,存储系统根据PVC要求自动创建

    • 存储驱动:可以使用主流的CephRBD或GlusterFS分布式存储方案,亦可使用方便简单的NFS(可以直接使用阿里云的NAS存储服务,支持NFS协议)方案

    • Retain:保留现场,K8S什么也不做

    • Delete:K8S删除PV及里面的数据

    • Recycle:K8S删除PV里的数据,PV再次Available

    • 通过Persistent Volume Claim来绑定卷和Pod,PV由Available状态转为Bound状态

    • PV释放后转为Released状态,并进行相应回收策略

    • 创建形式

Minikube - 轻量级K8S架设方案

docker准备
  • Docker Daemon

  • Docker Machine

安装
curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/

curl -Lo kubectl https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/

以下内容写入/init_minikube.sh并赋予可执行权限

#!/bin/bash
export MINIKUBE_WANTUPDATENOTIFICATION=false
export MINIKUBE_WANTREPORTERRORPROMPT=false
export MINIKUBE_HOME=$HOME
export CHANGE_MINIKUBE_NONE_USER=true
export KUBECONFIG=$HOME/.kube/config
mkdir -p $HOME/.kube && touch $HOME/.kube/config

minikube start --vm-driver=none #将k8s集群通过none驱动模式直接装入宿主机
使用
sudo su - #none驱动模式安装minkube要求使用root账号去管理操作
/init_minikube.sh

minikube dashboard --url #默认在30000端口开放k8s管理界面
minikube service frontend --url #指定服务的地址

#插件管理
minikube addons list
minikube addons enable 插件名
安装排错
  • minikube logs检查错误日志

  • 留意gcr.io/google_containers/pause-amd64等镜像是否成功下载

K8S集群管理

#管理命令(资源类型:nodes、pods、deployments、events、service、ing、all)
kubectl version
kubectl cluster-info #显示集群信息
kubectl get 资源类型 [-l label键=label值] [-n 名字空间 / --all-namespaces] #罗列工作节点
kubectl config view #查看配置
kubectl describe 资源类型 #资源详情
kubectl logs 资源名 #容器打印日志
kubectl label 资源类型 资源名 label键=label值 #打标签
#常用命令
kubectl get pod -o wide/yaml #检查pod所在节点
kubectl get services 服务名 -o yaml #检查服务详情
kubectl delete pod --grace-period=0 --force pod名 #立即强制删除pod

#容器执行命令
kubectl exec -ti Pod名 [-c 容器名] -- 命令
kubectl exec Pod名 [-c 容器名] -- 命令

#configmap管理
kubectl create configmap 配置名 --from-file=配置文件路径
kubectl get configmap 配置名 -o yaml

#创建deployment部署一个应用到Pod
kubectl create secret docker-registry regcred --docker-server=<your-registry-server> --docker-username=<your-name> --docker-password=<your-pword> --docker-email=<your-email> #安装registry凭据
方法1:kubectl run 部署名 --image=镜像地址 --port=8080 --replicas=副本数 --labels="key=value"
方法2:kubectl create|apply -f deployment.yaml
kubectl get deployments
kubectl get pods

#更新应用
kubectl set image deployments/部署名 部署名=镜像地址
kubectl rollout status deployments/部署名 #查看更新状态

#回滚应用
kubectl rollout undo deployments/部署名

#应用伸缩
kubectl scale deployments/部署名 --replicas=副本数

#开放pod服务为service
kubectl expose deployment/部署名 --name=服务名 --type=NodePort|LoadBalancer--port 端口号
kubectl get services #可查看服务开放地址

#下线服务
kubectl delete service -l label键=label值
kubectl delete deployment -l label键=label值

#禁止非worker节点调度运行POD
kubectl taint node 节点名 node-role.kubernetes.io/节点名="":NoSchedule

健康检查

  • 进程级别检查:检查Docker Daemon服务时候活跃

  • 应用级别检查

    • HTTP:状态码200 and 399为健康

    • Container Exec:执行容器命令,退出码为0则健康

    • TCP Socket:尝试套接字连接到容器内


Rancher

  • V1版本支持K8S、Mesos、Swarm,V2转而全力支持唯一K8S

  • Catalog:rancher构建的应用市场

  • Cattle:rancher自身使用的编排调度框架

安装

防火墙开放端口

  • SSH:22/tcp

  • RancherServer:8443/tcp、8080/tcp

  • K8S :6443(tcp ApiServer)、10250(tcp KubeletApi)、10251(tcp Schedule)、10252(tcp Control)、10255(tcp Control)、10256(tcp Kubeproxy)、30000/32767(tcp NodePort)

  • VXLAN:4789/udp

  • IPSec:500/udp、4500/udp

  • Etcd:2379/tcp、2380/tcp

  • Canal:80/tcp、443/tcp

  • Flannel:8285/udp、8472/udp、2375/udp

开启IPV4路由转发(CentOS 7.4+不必此操作)

#/etc/sysctl.conf追加一行
net.ipv4.ip_forward = 1

Docker准备

  • RancherServer及集群节点上支持最高Docker版本v17.03-ce

  • sudo yum install -y --setopt=obsoletes=0 docker-ce-17.03.2.ce-1.el7.centos docker-ce-selinux-17.03.2.ce-1.el7.centos

HTTPS证书准备

docker run -it --rm -p 443:443 -p 80:80 --name certbot \
            -v "/etc/letsencrypt:/etc/letsencrypt" \
            -v "/var/lib/letsencrypt:/var/lib/letsencrypt" \
            certbot/certbot certonly -n -v --standalone --agree-tos --email=admin@rancher.example.com -d rancher.example.com

cd /etc/letsencrypt
sudo ln -s live/rancher.example.com/fullchain.pem cert.pem
sudo ln -s live/rancher.example.com/privkey.pem key.pem

节点机调整

  • 自定义方式创建RKE集群对节点hostname有要求

# hostname要求符合如下正则 `'[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*'`
sudo hostnamectl set-hostname k8s-worker-1.cluster-a
sudo hostnamectl status
  • 为了加速节点及拉取私有镜像库的速率, 需要在节点机上增加一条host解析镜像库的局域网ip

Compose编排服务

version: '2' 

services:

  Rancher:
    image: rancher/server:preview
    container_name: rancher
    hostname: rancher
    restart: always
    ports:
      - '8443:8443'
      - '8080:8080'
    volumes:
        - /srv/rancher:/var/lib/rancher
        - /etc/letsencrypt:/etc/rancher/ssl
    entrypoint: rancher --http-listen-port=8080 --https-listen-port=8443
    command: --acme-domain rancher.example.com

启动服务

docker pull rancher/server:preview
docker-compose up -d Rancher
docker logs -f rancher #跟进rancher初始化状态
配置
  • 默认账号密码admin:admin

  • 登录系统并修改密码

创建集群
  • custom模式、canal网络创建集群

  • control、etcd节点要求至少1核2G内存(集群节点掉线可排查机器负载情况)

  • 配置Registries私有镜像仓库

调试
####
#RancherServer调试
docker logs -f rancher

#K8sNode调试
journalctl -xf -u docker
docker logs kubelet

感谢各位的阅读,以上就是“Kubernetes知识点有哪些”的内容了,经过本文的学习后,相信大家对Kubernetes知识点有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI