代码编织梦想

kubeadm/kubelet/kubectl区别

kubeadm是kubernetes集群快速构建工具
kubelet运行在所有节点上,负责启动POD和容器,以系统服务形式出现
kubectl:kubectl是kubenetes命令行工具,提供指令

启动

功能说明命令
启动节点的K8S服务systemctl start kubelet
设置开机启动systemctl enable kubelet

全局命令

命令功能说明
kubectl get pod --all-namespaces查询所有命名空间下的pod
kubectl get nodes查询集群下的所有节点(master、slave)
kubectl -n <命名空间名称> get svc获取某命名空间下的服务
kubectl -n <命名空间名称> get deployments查看命名空间下部署的工作负载相关信息
kubectl delete deployments <工作负载名称>删除工作负载
kubectl delete service <service名称>删除service
kubectl -n <命名空间> exec <pod名称> /bin/sh进入pod的容器中默认的docker容器内

部署相关命令

命令功能说明
kubectl create -f <yml文件>对yml文件进行加载与创建
kubectl apply -f <yml文件>更新部署配置,如果没有创建则创建(相当于create)
kubectl -n <命名空间名称> get pod [-o wide]查看已部署的pod, [-o wide]可以让显示的信息更加全面
kubectl describe pod <pod名称>查看Pod最详细信息
kubectl logs [-f] <pod名称>查看pod输出日志,相当于应用控制台输出,其中 [-f] 参数标识实时更新

在这里插入图片描述

其他命令

命令功能说明
kubectl lable pod <pod名称> key=value --overwrite=true使用命令给节点打标签
kubectl get pod --show-labels -o wide获取pod的标签详情
kubectl get node --show-labels获取节点的标签
kubectl taint nodes node1 key1=value1:NoSchedule设置污点
kubectl describe pod pod-name查看pod详情,本例中是查找 Taints 污点字段
kubectl taint nodes node1 key1:NoSchedule-去除污点
kubectl label node <节点名称> key=value给节点打标签
kubectl edit deployment <deployment的名称>修改deployment的参数

tomcat-deploy.yml文件简要说明

#代表了解析用的API版本,每个版本解析略有不同
apiVersion: apps/v1
#当前yml文件的用途,Deployment表示部署
kind: Deployment
#元数据
metadata: 
  #当前部署文件的名称
  name: tomcat-deploy
#详细内容
spec:
  #部署pod的数量
  replicas: 2 
  #部署的详细设置  
  template: 
    #再次定义metadata,说明这个模板的元数据是什么
    metadata:
      #配置标签,标签其实就是pod的别名
      labels:
        #每创建一个pod,app: tomcat-cluster就是pod名字
        app: tomcat-cluster
    spec:
      volumes: 
      #挂在数据卷的别名
      - name: web-app
        hostPath:
          # 宿主机的目录
          path: /mnt
      #表示容器们的设置
      containers:
      #当前创建的容器名字,通常和上面labels中的名字保持一致
      - name: tomcat-cluster
        #镜像的来源
        image: tomcat:latest
        #资源限定
        resources:
          #创建容器的基本需要
          requests:
          	#表示宿主机节点中只要有0.5核cpu并且内存超过200M为闲置的状态就可以部署tomcat容器
            cpu: 0.5
            memory: 200Mi
          #限制了容器使用的最大资源
          limits:
            cpu: 1
            memory: 512Mi
        #端口
        ports:
        #容器内部对外暴露的端口
        - containerPort: 8080
        volumeMounts:
        #这个name的名字要和上面的数据卷别名保持一致
        - name: web-app
          #容器的路径
          mountPath: /usr/local/tomcat/webapps

通过yml文件部署

  1. kubectl create -f tomcat-deploy.yml 加载yml文件并创建,然后等待一会。
  2. kubectl -n <命名空间名称> get pod [-o wide] 命令可以查看部署成功后的详情信息,根据yml配置文件中设置的命名空间进行查看。没有命名空间不添加-n <命名空间名称>
  3. kubectl logs [-f] <pod名称>查看日志即可。

k8s部署,其核心就是一个 yml 配置文件。

工作负载service

在这里插入图片描述
虽然每个Pod都有自己独立的虚拟IP,但是Pod和Pod之间天然是无法直接交流的。service的职能就是将不同主机上的Pod之间互相连通,让Pod和Pod之间也能正常的通信。

之前虽然在部署了两个pod,但是pod中的tomcat并不能直接对外提供服务,需要service这个组件来对外暴露应用。

service的yml:
文件名:tomcat-service.yml

apiVersion: v1
#资源为service
kind: Service
metadata:
  #部署的文件名称  
  name: tomcat-service
  labels:
  	#service也是一个特殊的pod,,是pod都要有label,因此有标签名,后期对pod进行选择的时候就会用到这个设置项了
    app: tomcat-service
spec:
  #在每个节点中开辟一个端口和内测tomcat进行端口映射,同时创建对应的服务
  type: NodePort
  #选择器
  selector:
  	#此处对应着tomcat-deploy.yml文件中labels,负载选择器
    app: tomcat-cluster
  #此处对应上图中的三个端口
  ports:
  - port: 8000
    targetPort: 8080
    nodePort: 32500

执行kubectl create -f tomcat-service.yml 创建服务。
执行kubectl get svc 查看服务。
执行kubectl describe servicetomcat-service 查看服务详情。
在这里插入图片描述
这里能够看到service暴露出来的 10.109.186.61 这个IP,但是这个IP并不能被直接访问,因为它只是集群内部的IP。但是由于再yml中配置了 nodePort ,nodePort在每个节点中开辟一个端口和内测tomcat进行端口映射,同时创建对应的服务,所以可以通过 节点IP:端口 直接访问到tomact。

如果想通过service 暴露的集群内IP对 工作负载 进行负载均衡,还需要用到 Rinted 这个工具。

参考文档:k8s中的Service与Ingress:http://blog.haohtml.com/archives/19945

Rinetd 的使用

Rinetd是Linux操作系统中为重定向传输控制协议工具。
可将源IP端口数据转发至目标IP端口。
在Kubernetes中用于将service服务对外暴露。

首先对service的yml文件进行修改:

文件名:tomcat-service.yml

apiVersion: v1
#资源为service
kind: Service
metadata:
  #部署的文件名称  
  name: tomcat-service
  labels:
  	#service也是一个特殊的pod,,是pod都要有label,因此有标签名,后期对pod进行选择的时候就会用到这个设置项了
    app: tomcat-service
spec:
  #在每个节点中开辟一个端口和内测tomcat进行端口映射,同时创建对应的服务
#  type: NodePort
  #选择器
  selector:
  	#此处对应着tomcat-deploy.yml文件中labels,负载选择器
    app: tomcat-cluster
  #此处对应上图中的三个端口
  ports:
  - port: 8000
    targetPort: 8080
#    nodePort: 32500

在上面yml文件中,注释掉了两个地方,表示所有的节点不再暴露32500端口,一切的请求 都由 service 提供的8000 来进行接收。
然后从新加载这个服务,可以删除服务然后再创建,使用命令:

kubectl create -f tomcat-service.yml

查看详情:
在这里插入图片描述
然后curl命令对进群内部IP进行测试:

curl serviceIP:端口

在这里插入图片描述

如果想测试负载下过,先参照下面基于NFS实现集群文件共享。

现在的service的虚拟IP还是k8s集群内部IP,不可以被外界直接访问。通过安装Rinetd来实现暴露对外界的IP和端口,具体安装步骤:

1、首先下载安装包
wget http://www.boutell.com/rinetd/http/rinetd.tar.gz

2、解压
tar xzvf rinetd.tar.gz
cd rinetd/

3、修改 rinetd.c
sed -i 's?65536?65535?g' rinetd.c

4、创建必须的目录并安装依赖
mkdir -p /usr/man/man8
yum install gcc
	
5、安装
make
make install

6、配置
配置文件/etc/rinetd.conf
如下就可以将8000端口映射到serviceIP的8000端口。在外访问8000就相当于serviceIP的8000端口。
#0.0.0.0表示允许哪些IP对当前服务器发起请求,0.0.0.0表示所有IP
#第一个8000 表示在当前宿主机上开放8000端口监听,每当收到请求时都会转发给内部的10.100.22.231:8000
0.0.0.0 8000 10.100.22.231 8000
logfile /var/log/rinetd.log
7、启动

rinetd -c /etc/rinetd.conf

基于NFS实现集群文件共享

NFS,是由SUN公司研制的文件传输协议
NFS主要是采用远程过程调用RPC机制实现文件传输

在这里插入图片描述

其实就是相当于docker中数据卷的映射概念,只不过需要建立一个新的节点作为 NFS 文件共享服务器(保存集群中所有容器要共享的数据)。
其区别在于docker是宿主机和容器的目录映射,而NFS是NFS文件共享服务器和集群节点的目录映射,映射的文件本质上是不存在于节点服务器的。

文件提供方

在这里插入图片描述

 yum install -y nfs-utils rpcbind 

然后创建一个目录,目录位置自定义就好。
然后 文件夹暴露共享:

 vim /etc/exports

添加:

 之前创建目录的全路径 服务器ip/24(rw,sync)

保存。其中rw表示可读可写,sync表示同步写入。
紧接着 启动服务 以及设置 开机自动启动:

systemctl start nfs.service
systemctl start rpcbind.service
systemctl enable nfs.service
systemctl enable rpcbind.service

如果之前已经安装过了,并且此次需要修改目录,只需要讲nfs重启即可:

systemctl restart nfs.service
systemctl restart rpcbind.service

然后验证:

exportfs

如果能看到之前设置的内容,则之前的配置正确。

节点服务器

 yum install -y nfs-utils 

只需要安装工具集就可以了。

showmount -e 文件提供方IP

如果能显示出 文件提供方的目录则表示成功,可以对其挂载。

mount 文件提供方IP:文件提供方全路径 /本地挂载路径

节点服务器映射pod容器目录

需要更新部署的 工作负载 ,或者删除现有的工作负载 从新部署。
参考上面 tomcat-deploy.yml 文件。

资源限定

参考上面 tomcat-deploy.yml文件,更新部署即可。

需要注意的时 cpu单位是以 核为单位的。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/xi_rurensheng/article/details/111089051

kubeadm升级K8s集群1.19.0到V1.20.0-爱代码爱编程

文章目录 一、注意事项二、升级管理节点:`2.1.查找最新版本号``2.2.升级kubeadm``2.3.驱逐node上的pod,且不可调度``2.4.检查集群是否可以升级,并获取可以升级的版本``2.5.执行升级``2.6.取消不可调度``2.7.升级kubelet和kubectl``2.8.重启kubelet`三、升级工作节点`3.1.升级ku

Kubernetes曝出“先天性漏洞”,所有版本都中招-爱代码爱编程

点击上方“程序猿技术大咖”,关注加群讨论 Kubernetes(又名K8s)是Google开源的容器集群管理系统(谷歌内部:Borg),现在由Cloud Native Computing Foundation维护,旨在帮助提升Docker容器化工作负载、服务、应用程序的部署、扩展和管理的自动化程度和便捷性。 Kubernetes通过将应用程序

Flink1.12 native kubernetes 演进之路-爱代码爱编程

点击上方 "zhisheng"关注, 星标或置顶一起成长 Flink 从入门到精通 系列文章 Flink 1.10 Flink 1.10 开始支持将 native kubernetes 作为其资源管理器。在该版本中,你可以使用以下命令在你的 kubernetes 集群中创建一个flink session。 ./bin/kubernetes-s