南七星之家 发表于 2022-6-21 16:49:16

【K8S】K8S入门基础知识

一、K8S基础知识


[*]K8S是什么
K8S(Kubernetes)是⼀个容器集群管理系统,可以做容器集群的⾃动化部署,⾃动化扩缩容,维护等功能


[*]为什么要用K8S
传统应⽤部署是通过将程序打包在服务器上运⾏,通过允许脚本将程序跑起来,如果⼀个服务器⽆法响应⼤量请求,需要通过运维⼈员添加服务器来做负载均衡来分担压⼒,在此过程中,是有⼈⼒介⼊的过程的,K8S⽤于解决该问题


[*]K8S的架构
K8S是属于主从设备模型(Master-Slave模型),Master节点主要负责容器的调度、管理和运维,Slave节点负责⽤户程序的执⾏,主节点⼀般称之为Master Node或者Head Node,从节点⼀般称之为Worker Node或者Node,⼀般来说,主节点或者从节点都是K8S的Master组件和Slave组件的实体服务器,每⼀个Node节点都对应着⼀台服务器(可以将Master和Slave安装在同⼀台服务器上,但是不推荐),所有的节点构成K8S集群系统,在⼀个集群中可以存在多个Master节点和Slave节点


[*]通过K8S能做什么
1.快速部署应用
2.快速扩展应用
3.无缝对接新的应用功能
4.节省资源,优化硬件资源的使用


[*]K8S几个基本概念
Pod:Pod是在Kubernetes中创建和管理的最⼩可部署的计算单元
Deployment:作⽤是管理和控制Pod和ReplicaSet,管控它们运⾏在⽤户的期望之中
ReplicaSet:管理和控制Pod,但是它是受控于Deployment的,类似于包⼯头下的⼩包⼯头
Service:负责管控Pod的⽹络服务,K8S中的服务不同于我们常说的服务,在官⽅给的解释中说到,Kubenetes为Pods提供⾃⼰的IP地址,并为⼀组Pod提供相同的DNS域名,并且可以在它们之间进⾏负载均衡,这相当于API⽹关,做⼀个负载均衡器。


[*]内容来自 kubernetes中文社区
二、一些常用命令


[*]允许Master节点调度Pod,默认Master节点不允许部署调度Pod,使用如下命令去除污点
kubectl taint nodes --all node-role.kubernetes.io/master-

[*]节点Node相关
kubectl get node -owide                #查看节点信息
kubectl top node                #查看Node的资源使用情况
kubectl describe node nodeName                #查询节点的详细信息

[*]节点标签相关,标签可以加在各种资源上,进行关联
kubectl get node --show-labels                #查看节点标签
kubectl label nodes xxx k1=v1                #给节点添加标签
kubectl label nodes xxx k1-                #删除标签

[*]命名空间相关,NameSpace是一组资源和对象的抽象,有一个默认的NameSpace(Default)
kubectl create ns                #创建ns
kubectl get ns                #获取所有的NameSpace

[*]Pod相关,Service命令与管理Pod的一致,将【pod】替换成【service】
kubectl apply -f pod-nginx.yml                #使用yaml文件创建Pod
kubectl delete -f pod-nginx.yml                #使用yaml文件删除Pod
kubectl get pod -n ns                #查看ns下所有的Pod
kubectl describe pod -n k8s-demo xxx                #查看Pod的详细信息
kubectl delete pod -n ns xxx                #删除Pod

[*]Deployment的创建方式和通过yaml文件创建Pod类似,是Pod的管理者
kubectl set image deploy nginx-deployment -n ns *=nginx:latest                #修改Pod的镜像版本
kubectl scale deploy-n k8s-demo nginx-deployment --replicas=2                #设置Pod的副本数量Pod是平凡的,它门会被创建,也会死掉(生老病死),并且他们是不可复活的,每个pod都有自己的ip,这些IP也随着时间的变化也不能持续依赖。这样就引发了一个问题:如果一些Pods提供了一些功能供其它的Pod使用(让我们叫作前台),在kubernete集群中是如何实现让这些前台能够持续的追踪到这些后台的。答案是Service
三、yaml示例


[*]创建Pod
apiVersion: v1
kind: Pod
metadata:
name: nginx
namespace: demo
spec:
nodeSelector:
    app: nginx
containers:
- name: nginx
    image: nginx:1.18.0
    # 镜像拉取策略,默认是IfNotPresent,其余还有Always, Never
    imagePullPolicy: IfNotPresent

[*]创建deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
namespace: demo
spec:
# 副本数
replicas: 3
selector:
    matchLabels:
      app: nginx
template:
    metadata:
      labels:
      app: nginx
    spec:
      # 绑定节点
      nodeName: demoNode
      # 通过标签进行节点选择
      nodeSelector:
      app: nginx
      containers:
      - name: nginx
      image: nginx:1.18.0
      env:
          - name: k1
            value: v1
      ports:
      - containerPort: 80
      # 存活探针
      livenessProbe:
          httpGet:
            path: /index.html
            port: 80
          initialDelaySeconds: 3
          periodSeconds: 3
      # 就绪探针
      readinessProbe:
          httpGet:
            path: /index.html
            port: 80
          initialDelaySeconds: 3
          periodSeconds: 3

[*]创建Service
apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
# 通过标签与pod匹配
selector:
    app: nginx
ports:
- name: default
    protocol: TCP
    port: 80
    targetPort: 80
    type: ClusterIp说明:以上K8S内容只是本人作为一个简单入门的记录,包含了日常工作的基本使用,再往深的内容并不涉及,比如Etcd存储,调度器,监控器等等,这些内容可以上Kuberneters的中文社区自己学习

来源:https://www.cnblogs.com/hujh2022/p/16342876.html
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 【K8S】K8S入门基础知识