这篇文章主要讲解了“Kubernetes知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Kubernetes知识点有哪些”吧!
负责应用运行(生产环境至少需要三个工作节点)
单Node上可工作数个Pod
运行三项关键服务
Kubelet:节点上的集群客户端,负责节点管理及对master通信的代理
Kube Proxy:维护网络以支持Service服务层
Container Runtime:容器运行时交互
负责集群调度
运行关键服务
Kube API Server:提供Kube Api服务
Etcd:集群内部一致性、可用性数据存储
Kube Scheduler:调度Pod到合适Pod上运行
Kube Controller Manager
Kube DNS
工作在master节点上,下一代的Replication Controller
主要被Deployments用作pod的管理调度
在Node上创建,非持久化
包含一组相互间可localhost通信、关系紧密的容器(共享存储卷、分配的cluster-ip、运行信息)
容器应用的基本管理单元,可接受EndPoint请求
部署pod容器组,并监控管理
master node上Controller Manager的一部分
一组后端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
用于管理部署有状态应用
确保选定节点上始终有指定pod运行
作为公网访问集群后端服务的入口,是Service Nodeport等之外更高级的服务暴露模型
功能包括:集群外部的L7负载均衡+服务发现、反向代理,SSL截断,虚拟主机头访问
仅能在标准80/443口上暴露服务,可配置http访问规则,包括:host、path
驻留在control plane节点上,不占用work node的主机端口资源
持续请求kubernetes API,实时感知后端 service、pod变化(traifik无需这步,其直接和K8S交互)
结合Ingress规则刷新负载均衡器的配置,实现服务发现
基于插件形式实现,扩展性强
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状态,并进行相应回收策略
创建形式
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
等镜像是否成功下载
#管理命令(资源类型: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:尝试套接字连接到容器内
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知识点有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。