kubernetes笔记

网友投稿 264 2022-10-26

kubernetes笔记

kubetnetes 核心组件:

master----------------etcd 消息中间件,保存了整个集群的状态; apiserver 是整个系统的对外接口,并提供认证、授权、访问控制、API注册和 发现等机制; controller manager 负责维护集群的状态,比如故障检测、自动扩展、滚动更新等,负责管理控制器,包括 endpoint-controller(刷新服务和 pod 的关联信息)和 replication-controller(维护某个 pod 的复制为配置的数值)scheduler 负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上;slave------------------- kubelet 是工作节点执行操作的 agent,负责具体的容器生命周期管理,根据从数据库中获取的信息来管理容器,并上报 pod 运行状态等,同时也负责Volume(CVI)和网络(CNI) 的管理;Container runtime 负责镜像管理以及Pod和容器的真正运行(CRI);kube-proxy 负责为Service提供cluster内部的服务发现和负载均衡,网络代理转发,是一个简单的网络访问代理,同时也是一个 Load Balancer。它负责将访问到某个服务的请求具体分配给工作节点上的 Pod

Kubernetes基本概念:

Pod ( 节点) 是一组紧密关联的容器集合,调度的基本单位。Pod的设计理念是支持多个容器在一个Pod中共享网络和 文件系统,可以通过进程间通信和文件共享这种简单高效的方式组合完成服务。Node(容器组) Pod真正运行的主机,可以物理机,也可以是虚拟机。为了管理Pod,每个Node 节点上至少要运行container runtime(比如docker或者rkt)、 kubelet 和 kube- proxy 服务。Replication Controller 是用来通过label关联管理Pod的,每个RC由一个或多个Pod组成Label 是用于区分Pod、Service、RC的key/value键值对,Pod、Service、RC可以有多个label,但是每个label的key只能对应一个value,整个系统都是通过Label进行关联,得到真正需要操作的目标Service k8s的最小操作单元,是定义在集群中一组运行Pod集合的抽象资源,对外为一个单一的访问接口,分配一个唯一的IPkubectl 客户端命令行工具,将接收的命令,发送给kube-apiserver,作为对整个平台操作的入口Replication Controller 负责维持Pods中的正常运行的Pod的个数Endpoints Controller 负责维持Pods和Service的关联关系Node Controller 负责整个系统中node up 或down的状态的响应和通知Service Account & Token Controllers 负责为新的命名空间创建默认的账号和API访问的Tokenflannel  IP地址的分配accessing_the_api 端口,IP 地址和代理的防火墙规则。ux 用户可以通过 web 界面操作 Kubernetes。CNI Container Network Interface的简称Replication Controller rc 来部署、升级PodReplica Set rs 下一代Replication ControllerDeployment 更加方便的管理Pod和Replica Set

详细概念

节点 在 Kubernetes 中,节点是实际工作的点,节点可以是虚拟机或者物理机器,依赖于一个集群环境。每个节点都有一些必要的服务以运行容器组,并且它们都可以通过主节点来管理。必要服务包括 Docker,kubelet 和代理服务容器状态 节点周期:Pending,Running,Terminated。节点状态:NodeReachable 表示集群可达,NodeReady 表示 kubelet 返回 Status Ok 并且 HTTP 状态检查健康。节点管理 节点并非 Kubernetes 创建,而是由云平台创建,或者就是物理机器、虚拟机。在 Kubernetes 中,节点仅仅是一条记录,节点创建之后,Kubernetes 会检查其是否可用。节点控制 在 Kubernetes 主节点中,节点控制器是用来管理节点的组件。主要包含:集群范围内节点同步,单节点生命周期管理。可以使用 kubectl 来一条一条的添加节点。容器组 容器组是创建,调度,管理的最小单位。 一个容器组使用相同的 Docker 容器并共享卷(挂载点)。一个容器组是一个特定应用的打包集合,包含一个或多个容器容器组管理 容器组是一个应用管理和部署的高层次抽象,同时也是一组容器的接口。容器组是部署、水平放缩的最小单位容器组的生命状态 包括若干状态值:pending、running、succeeded(所有的容器都正常退出。)、failed。

部署 Kubernetes几种方式部署 Kubernetes: kubeadm,docker-desktop,k3s

使用 kubeadm 部署 kubernetes

1,安装dockeryum-config-manager --add-repo && yum -y install docker-ce --nobest2,安装 kubelet kubeadm kubectl

cat <

3,修改内核的运行参数

cat <> ~/.bash_profile source /root/.bash_profile

4,配置 kubelet(rpm -ql kubelet 查看具体)

cat > /usr/lib/systemd/system/kubelet.service.d/10-proxy-ipvs.conf << EOF [Service] ExecStartPre=-/sbin/modprobe ip_vs ExecStartPre=-/sbin/modprobe ip_vs_rr ExecStartPre=-/sbin/modprobe ip_vs_wrr ExecStartPre=-/sbin/modprobe ip_vs_sh EOF

5,部署 (master)kubeadm init --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers --pod-network-cidr 10.244.0.0/16 --v 5 --ignore-preflight-errors=all部署 (slave)kubeadm join 192.168.116.200:6443 --token rzmegv.g8k9kq60ectkrgov --discovery-token-ca-cert-hash sha256:a32c8299024f36a395b28ed58804dc41737d70ba544b3ece82450b57b81a90746,部署 CNI (flannel)

kubectl get node -o yaml | grep CIDR kubectl apply -f /etc/kubernetes/admin.conf 192.168.116.201:/etc/kubernetes/

master 的 admin.conf`拷贝到各个节点kubectl get nodes 查看节点kubectl get all -A 查看启动的服务8,部署 Dashboard(仪表盘)

选择对应版本 wget NodePort ports: - port: 443 targetPort: 8443 nodePort: 30001

kubectl create -f recommended.yaml kubectl get pod --all-namespaces kubectl -n kubernetes-dashboard get pods kubectl -n kubernetes-dashboard get svc curl https://127.0.0.1:30001 kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin kubectl describe secret -n kube-system kubectl get secrets -n kube-system | grep dashboard-admin | awk '{print $1}' | grep -E '^token' | awk '{print $2}'

YAML bind常用类型 Endpoints、 Service、 Deployment、Pod

1、 Endpoints 可以把外部的链接到k8s系统中,如下可以把199.199.199.199:3306 链接到k8s内部Service部署一个内部虚拟IP,其他deployment可以链接。

[root@a test]# cat mysql-service.yaml apiVersion: v1 #aip版本 kind: Service #资源类型 metadata: #元数据 name: mysql-service #Service 的名称 namespace: test #命名空间 spec: ports: - port: 12341 targetPort: 3306 protocol: TCP [root@a test]# cat mysql-endpoints.yaml apiVersion: v1 kind: Endpoints metadata: name: mysql-service namespace: test subsets: - addresses: - ip: 199.199.199.199 ports: - port: 3306 protocol: TCP

kubectl apply -f mysql-service.yaml 部署service kubectl apply -f mysql-endpoints.yaml 部署endpoints kubectl describe service mysql-service 获取详细信息 kubectl get service kubectl get endpoints

[root@a test]# cat nginx-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: #元数据 name: nginx-deployment #service的名称 labels: app: nginx spec: #详细说明书 replicas: 3 strategy: rollingUpdate: #由于replicas为3,则整个升级,pod个数在2-4个之间 maxSurge: 1 #滚动升级时会先启动1个pod maxUnavailable: 1 #滚动升级时允许的最大Unavailable的pod个数 selector: matchLabels: app: nginx template: metadata: labels: app: nginx #模板名称 spec: #定义容器模板,该模板可以包含多个容器 containers: - name: nginx-container-aaaa image: nginx ports: - containerPort: 80

kubectl apply -f nginx-deployment.yaml 部署nginx(只有容器ip,没有集群ip) kubectl get endpoints kubectl get deployment -o wide kubectl get service

kubectl expose deployment nginx-deployment --cluster-ip=10.111.111.111 #暴露 ningx-deployment 端口,--type=NodePort 为节点也暴露端口。 --port=803 集群端口 ,--target-port=80 容器端口, --type=NodePort 节点随机端口 kubectl get service #再次查看,nginx-deployment有了集群ip地址10.111.111.111 kubectl edit deployment nginx-deployment --record #修改文件,不建议 kubectl scale deployment nginx-deployment --replicas=10 --record #弹性伸缩 --record (history里面记录命令,重要参数) kubectl set image deploy nginx-deployment nginx-container-aaaa=nginx:1.18 --record #镜像升级 nginx-deployment 容器镜像 kubectl rollout history deployment nginx-deployment #查看历史版本 kubectl rollout undo deployment nginx-deployment #回滚到上一个版本 kubectl rollout undo deployment nginx-deployment --to-revision=1 #回滚到版本1 kubectl get deployment -o wide #可以查看nginx版本 kubectl describe pod podname #排错,常见flannel异常 kubectl rollout pause deployment/nginx-deployment2 #暂停升级 kubectl rollout resume deployment/nginx-deployment2 #继续升级

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:如何通过 Serverless 提高 Java 微服务治理效率?
下一篇:Springboot整合RabbitMq测试TTL的方法详解
相关文章

 发表评论

暂时没有评论,来抢沙发吧~