一.k3s集群部署

https://docs.rancher.cn/docs/k3s/_index k3s官网

1.安装master
curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -
2.获取节点和token
 kubectl get nodes    //获取节点
 
 K3S_TOKEN使用的值存储在你的服务器节点上(master的牡蛎下)的
 /var/lib/rancher/k3s/server/node-token
//token
K10a82087509e8605b2aa1c5c6c4d2afbd81ae425a7ae5ffc3f8e50f9c41e06a168::server:b031c62a7da5ec5413622c3092a43b88
3.设置worker节点
curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn K3S_URL=https://10.201.2.12:6443 K3S_TOKEN=K10a82087509e8605b2aa1c5c6c4d2afbd81ae425a7ae5ffc3f8e50f9c41e06a168::server:b031c62a7da5ec5413622c3092a43b88 sh -
4.手动设置worker
kubectl label node dev-hwc-gy1-deepexi-datafacts-fastai-other-12-0002 node-role.kubernetes.io/worker=worker
kubectl label node dev-hwc-gy1-deepexi-datafacts-fastai-other-12-0003 node-role.kubernetes.io/worker=worker
5.k3s的原理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xlMDeqJP-1637328257748)(https://gitee.com/qinyingjie/pic/raw/master/images/how-it-works-k3s.svg)]

6.master和node
Master  控制节点
    apiserver
    类似我们给前端提供的api接⼝。
    资源操作的唯一入口,接收用户输入的命令,提供认证、授权、API注册和发现等机制
    scheduler
    负责决定将Pod放到哪⼀个Node上去运⾏。
    controller-manager
    管理Cluster中各种资源。资源操作的唯一入口,接收用户输入的命令,提供认证、授权、API注册和发现等机制
    etcd
    保存k8s相关的配置信息和状态信息。
    如果pod发⽣变化,那么它会迅速通知相关的组件进⾏处理。
Node  工作节点
    kubelet
    负责维护容器的生命周期,即通过控制docker,来创建、更新、销毁容器
    kube-proxy
    负责提供集群内部的服务发现和负载均衡
    当service接收到请求后,转发到某个node时,会由该node的kube-proxy负责接收,然后转
    发到后端的容器。
    如果有多个副本,那么它会实现负载均衡的能⼒。
    docker
    负责节点上容器的各种操作
     

Master:集群控制节点,每个集群需要至少一个master节点负责集群的管控

Node:工作负载节点,由master分配容器到这些node工作节点上,然后node节点上的docker负责容器的运行

Pod:kubernetes的最小控制单元,容器都是运行在pod中的,一个pod中可以有1个或者多个容器

Controller:控制器,通过它来实现对pod的管理,比如启动pod、停止pod、伸缩pod的数量等等

Service:pod对外服务的统一入口,下面可以维护者同一类的多个pod

Label:标签,用于对pod进行分类,同一类pod会拥有相同的标签

NameSpace:命名空间,用来隔离pod的运行环境

二.部署h2o集群步骤

k8s集群部署h2o https://www.pavel.cool/h2o-3/h2o-kubernetes-support/

k8s学习 https://blog.csdn.net/pyw1243591908/article/details/103529529

1.搭建k3s集群
2.制作镜像

docker pull h2oai/h2o-open-source-k8s 拉镜像

docker run h2oai/h2o-open-source-k8s 启动

3.编写yaml文件
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: h2o-stateful-set
  namespace: h2o-statefulset
spec:
  serviceName: h2o-service
  replicas: 2
  selector:
    matchLabels:
      app: h2o-k8s
  template:
    metadata:
      labels:
        app: h2o-k8s
    spec:
      terminationGracePeriodSeconds: 10
      containers:
        - name: h2o-open-source-k8s
          image: 'h2oai/h2o-open-source-k8s'
          ports:
            - containerPort: 54321
              protocol: TCP
          env:
            - name: H2O_KUBERNETES_SERVICE_DNS
              value: h2o-service.h2o-statefulset.svc.cluster.local
            - name: H2O_NODE_LOOKUP_TIMEOUT
              value: '180'
            - name: H2O_NODE_EXPECTED_COUNT
              value: '2'
---
apiVersion: v1
kind: Service
metadata:
  name: h2o-service
  namespace: h2o-statefulset
spec:
  type: NodePort
  selector:
    app: h2o-k8s
  ports:
  - protocol: TCP
    port: 54321
    nodePort: 30010
    targetPort: 54321

4.启动,并访问
5.访问链接
http://10.201.2.13:30010
http://10.201.2.14:30010

http://10.201.2.15:54321
三.常用命令

一定要加上命令空间

1.执行文件
kubectl delete -f  h2o.yaml           //删除pod和services

kubectl apply -f h2o.yaml             //通过yaml部署

kubectl create deployment my-nginx --image nginx:latest  //使用命令创建
2.获取全部信息
kubectl get all -n h2o-statefulset      //查询所有节点详情

kubectl get pod,svc  -o wide -n h2o-statefulset        //查看pods和svc详情
3.获取pod信息
kubectl get pods -n h2o-statefulset        //查看pods

kubectl describe pod  -n h2o-statefulset   //查看详情

kubectl get pods -o wide  -n h2o-statefulset   //查询pod的ip和port
4.获取service信息
kubectl get services  -n h2o-statefulset   //查看services

kubectl describe service/h2o-service  -n h2o-statefulset  //查询服务详情

kubectl get services  -n default //查询services
5.删除部署
kubectl delete -f  h2o.yaml  

或者

kubectl delete statefulset.apps/h2o-stateful-set  -n h2o-statefulset  //删除命名空间

kubectl delete service/h2o-service  -n h2o-statefulset   //删除services
6.查看controller
kubectl get statefulsets -n h2o-statefulset   //查看statefulsets状态

kubectl get deployment  //查看所有deployment
7.进入容器内部
kubectl exec -it h2o-stateful-set-0 -n h2o-statefulset  --/bin/bash  //进入容器内部

kubectl exec -ti h2o-stateful-set-0  -n h2o-statefulset     -- /bin/sh   //进入容器内部
8.查看节点日志
kubectl  logs -f -n h2o-statefulset h2o-stateful-set-0
9.查询服务域名能否可用
nslookup myservice   //查询映射服务

nslookup h2o-service.h2o-statefulset.svc.cluster.local  //查询服务域名
10.查询命名空间
kubectl get namespace  //查询所有命名空间

kubectl get ns   #查看k8s上所有的namespace

kubectl create ns pingpang    #创建新的namespace "pingpang
11.修改副本数量
kubectl scale deployments/my-nginx --replicas=3   //将副本数修改为3个

kubectl scale sts web --replicas=4 -n nginx-ss   #扩容

kubectl scale sts web --replicas=2 -n nginx-ss   #缩容
四.Pod status 状态解释
错误英文中文
CrashLoopBackOff容器退出,kubelet正在将它重启
InvalidImageName无法解析镜像名称
ImageInspectError无法校验镜像
ErrImageNeverPull策略禁止拉取镜像
ImagePullBackOff镜像正在重试拉取
RegistryUnavailable连接不到镜像中心
ErrImagePull通用的拉取镜像出错
CreateContainerConfigError不能创建kubelet使用的容器配置
CreateContainerError创建容器失败
m.internalLifecycle.PreStartContainer执行hook报错
RunContainerError启动容器失败
PostStartHookError执行hook报错
ContainersNotInitialized容器没有初始化完毕
ContainersNotReady容器没有准备完毕
ContainerCreating容器创建中
PodInitializingpod 初始化中
DockerDaemonNotReadydocker还没有完全启动
NetworkPluginNotReady网络插件还没有完全启动
五.安 装 minikube
设置阿里云镜像
vim /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0

安装minikube
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

安装kubectl
curl -LO https://dl.k8s.io/release/v1.20.0/bin/linux/amd64/kubectl
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

安装conntrack
yum install

启动minikube
minikube start --vm-driver=none --image-mirror-country='cn'  

停止minikube
minikube stop
六.重要概念
Cluster——是计算、存储和网络资源的集合
  
Master——Cluster的大脑,决定将应用放在哪里运行

Node——职责是运行容器应用

Pod——k8s的最小工作单元,包含1orN个容器。

Controller——k8s通过它来管理Pod
	包含:Deployment、ReplicaSet、DaemonSet、StatefulSet、Job

Service——为Pod提供了负载均衡、固定的IP和Port

Namespace——解决同一个Cluster中,如何区别分开Controller、Pod等资源的问题

Kubernetes的系统组件都被放到kube-system的namespace中。
 
kubelet是唯一没有以容器形式运行的Kubernetes组件。
七.工作流程
 当我们执行部署应用并指定两个副本的时候,执行流程如下所示:
1> Kuberctl发送部署请求到API Server。
2> API Server通知Controller Manager创建一个deployment资源。
3> Scheduler执行调度任务,将两个副本Pod分发到node1和node2上。
4> node1和node2上的kubectl在各自的节点上创建并运行Pod。

image-20210919161606386

image-20210919161811067

八.k8s容器

九.滚动更新

image-20210919162606515

十.相关图片
image-20210915203213725
十一.转发K8S后端服务的四种方式
  • ClusterIP
  • NodePort
  • loadbalance
  • Ingress
十二.k8s中的port
nodePort    //外部机器可访问的端口。

targetPort  //容器的端口(最根本的端口入口)

port    //kubernetes中的服务之间访问的端口
十三.k8s的核心功能

kubernetes的本质是一组服务器集群,它可以在集群的每个节点上运行特定的程序,来对节点中的容器进行管理。目的是实现资源管理的自动化,主要提供了如下的主要功能:

  • 自我修复:一旦某一个容器崩溃,能够在1秒中左右迅速启动新的容器
  • 弹性伸缩:可以根据需要,自动对集群中正在运行的容器数量进行调整
  • 服务发现:服务可以通过自动发现的形式找到它所依赖的服务
  • 负载均衡:如果一个服务起动了多个容器,能够自动实现请求的负载均衡
  • 版本回退:如果发现新发布的程序版本有问题,可以立即回退到原来的版本
  • 存储编排:可以根据容器自身的需求自动创建存储卷
十四.为什么使用k8s

k8s是一个开源的容器集群管理系统,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。

1、故障迁移:当某一个node节点关机或挂掉后,node节点上的服务会自动转移到另一个node节点上,这个过程所有服务不中断。这是docker或普通云主机是不能做到的

2、资源调度:当node节点上的cpu、内存不够用的时候,可以扩充node节点,新建的pod就会被kube-schedule调度到新扩充的node节点上

3、资源隔离:创建开发、运维、测试三个命名空间,切换上下文后,开发人员就只能看到开发命名空间的所有pod,看不到运维命名空间的pod,这样就不会造成影响,互不干扰

传统的主机或只有docker环境中,登录进去就会看到所有的服务或者容器

4、因为采用docker容器,进程之间互不影响,

5、安全:不同角色有不同的权限,查看pod、删除pod等操作;RBAC认证增加了k8s的安全

快速精准地部署应用程序

  • 限制硬件用量仅为所需资源

Kubernetes 的优势

  • 可移动: 公有云、私有云、混合云、多态云
  • 可扩展: 模块化、插件化、可挂载、可组合
  • 自修复: 自动部署、自动重启、自动复制、自动伸缩

负载均衡

k8s可以更快的更新新版本,打包应用,更新的时候可以做到不用中断服务,服务器故障不用停机,从开发环境到测试环境到生产环境的迁移极其方便,一个配置文件搞定,一次生成image,到处运行。。。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐