• k8s vs k3s 差异解析 二者该如何选择

    目前,我们看到K3s或轻量级的Kubernetes发行版,轻巧、高效、快速,占用空间极小。鉴于目前企业对于在生产环境中使用K3s还是K8s感到纠结。我们就此讨论一K3s和K8s各自的独特之处。如果你只想在你的企业中使用其中之一,想避免选择的纠结,请和我一起前进。 让我们开始吧! 什么是 K3s? K3s是Rancher实验室的一个轻量级Kubernetes发行版,是由CNCF完全认证的Kubernetes产品。在K3s中,我们看到运内存占用或集群组件的二进制文件很小。这意味着K3s的体积很小。 由于K3s的二进制文件很小,所以它是非常轻量级的,这使得安装过程更快。此外,用这种轻量级的Kubernetes部署应用程序也更快。K3s有一个基础二进制包,其大小不到100MB。由于它如此之小,我们甚至可以在Raspberry Pi(价格低廉的小型计算机硬件)中运行一个K3s集群。K3s Working Structure(Source: K3s) K3s的优势 小型 K3s 的最大优势是它的尺寸最小(小于 100 MB),这有助于它以最少的设置在小型硬件中启动 Kubernetes 集群。 快速部署 curl -sfL https://get.k3s.io | sh - 检查就绪代码 takes maybe 30 seconds k3s kubectl get node 轻量 K3s 由于内存占用小,非常轻量,这有助于 Kubernetes 快速启动和运行。这意味着包含运行集群所需的所有非容器化组件的二进制文件更小。 持续集成 K3s,由于其轻量级的环境和小尺寸,有助于持续集成。它有助于将来自多个贡献者的代码自动集成到单个项目中。 物联网和边缘计算的完美选择 由于支持 ARM64 和 ARMv7,K3s 对于要在资源受限的物联网设备上分发Kubernetes 非常有效。 简单和安全 小于 100 MB 的单个二进制文件封装了 K3s,这使得它变得简单,而且单个二进制文件易于保护,副作用更少。 什么是K8s? Kubernetes或K8s是最流行的管理容器的编排工具。它具有可移植性、灵活性和可扩展性,同时支持命令式/声明式配置和自动化,作为CNCF的一个毕业项目,其拥有一个庞大的生态系统。 Kubernetes。终极指南 围绕可扩展和可靠服务的需求每天都在成倍增加。市场的驱动力是客户要求他们最喜欢的服务拥有零停机时间,而公司每停机一分钟就会损失数百万美元。如果你遇到过负责保持系统运行的空间,你会[...]。 Kubernetes是为适应大规模配置(多达5000个节点)和帮助在生产环境中部署应用程序而设计的。 K8s的优势 可移植性 Kubernetes具有高度的可移植性,因为大量的基础资源和环境配置都使用Kubernetes。大多数其他编排器都缺乏这种可移植性,因为它们与特定的运行时或基础设施绑在了一起。 灵活 Kubernetes非常灵活,因为它实际上可以与任何容器运行时(运行容器的程序)一起工作。它是Kubernetes集群的一部分,它依靠CRI-O将Kubernetes与CRI(容器运行时接口)集成。但是,这种整合并不适用所有可用的容器运行时,例如runc或Rkt。它使用kubelet来调度容器。 多云能力 Kubernetes是供应商无关的,这意味着它可以在任何可用的基础设施上运行,包括公共云、私有云和混合云。 可扩展性 根据传入流量来扩展应用程序的能力是任何现代基础设施的基本功能。HPA(HorizontalPod Autoscaler)是Kubernetes中的一个内置资源,它决定了一个服务的副本数量。在Kubernetes中,弹性是一个高度自动化的核心组件。 开放源代码 Kubernetes是开源的,属于CNCF的范畴,因此与其他工具有更好的兼容性,也有助于整个项目在社区驱动的贡献者帮助下快速修复错误和发布。 k8s与k3s:区别 K3s在功能上与K8s没有什么不同,但它们有一些区别,使它们显得独特。K3s能比K8s更快地部署应用程序。不仅如此,K3s可以比K8s更快地启动集群。K8s是一个通用的容器编排器,而K3s是一个专门为在裸金属服务器上运行Kubernetes而打造的容器编排器。 Kubernetes使用kubelet,这是一个在每个Kubernetes节点上运行的代理,对该节点上运行的容器进行循环控制。这个代理程序在容器内运行。而K3s并不使用kubelet,它在主机上运行kubelet,使用主机的调度机制来运行容器。 同样,我们可以看到,K3S由于体积小,所以是轻量级的,这有助于它在RaspberryPi等资源有限的物联网设备中运行集群。相比之下,我们可以看到,普通的Kubernetes或K8s在物联网或边缘计算设备中是不可行的。另外,K3s同时支持ARM64和ARMv7的二进制文件结构。 Kubernetes或K8s可以托管运行于多个环境中的工作负载,而K3s只能托管在单一云中运行的工作负载。这主要是因为K3s不包含在多个云上维护复杂的工作负载的能力,因为它的规模很小。 同时,我们可以看到 Kubernetes 借助其大规模的能力,在托管工作负载和多云环境中运行集群具有优势。K3s是一个独立的服务器,与K8s不同,它是Kubernetes集群的一部分。K8s依靠CRI-O来整合Kubernetes与CRI(容器运行时接口),而K3s使用CRI-O与所有支持的容器运行时兼容。K8s使用kubelet来调度容器,但K3s使用主机的调度机制来调度容器。 K3s使用kube-proxy来代理Kubernetes节点的网络连接,但K8s使用kube-proxy来代理单个容器的网络连接。它还使用kube-proxy来设置IP伪装,而K3s不使用kube-proxy来做这个。 同样,K8s使用kubelet来监视Kubernetes节点的配置变化,而K3s不监视Kubernetes节点的配置变化。相反,它从Kubernetes控制平面接收包含配置信息的部署清单,并做出相应的改变。 当涉及到大规模数据环境的编排(自动化任务的编排和协调)时,Kubernetes非常有优势,因为它有存储大量数据的数据库和编排大量对象的能力。同时,k3s对小规模数据的情况也是比较有用的。存储在一个小于100MB的二进制文件中,这将有助于快速启动集群,更快地调度pod和其他任务。 k3s有比k8s更严格的安全部署,因为其攻击面小。k3s的另一个优势是,它可以减少安装、运行或更新Kubernetes集群所需的依赖性和步骤。 我应该选择k3s还是k8s? 中等市值的企业可以决定同时使用K3s和K8s 从上面的讨论中可以看出,K3s和K8s都有其优点和缺点,这使得它们彼此之间有独特的区别。两者都非常有用,但鉴于业务情况,不同业务场景的用法会也不一样。 我们已经看到了K8s对于大型应用的好处,牢记一点,一个处理大量数据的高市值企业,其工作负载分布在多个云服务器中,应该使用K8s,这将在很多方面受益。 中等市值的企业可以同时使用K3s和K8s,因为企业在运营过程中不会有确定的吞吐量。他们可以从使用K8s来处理大型工作负载中受益,而对于小规模生产过程中需要快速运行集群的情况,使用K3s会有更有优势。保持K3s和K8s之间的平衡可以帮助企业在保持正常运营的同时节省大量的资金。 没有任何大型应用的小市值企业可以自愿选择K3s,因为K3s在部署小工作负载的应用时非常快速,而且安装、运行和更新也很容易。 热衷于物联网和边缘计算的独立开发者选择K3s作为他们的Kubernetes发布环境会更大优势。他们使用许多计算资源受限的硬件,如RaspberryPi和其他。我们都知道K3s是以一个小的单一二进制文件出现的,并且支持在ARM64和ARMv7的物联网设备上运行。 最后的想法 您可能认为 k3s 比“全脂”k8s 更好,但让我提醒您 k3s 存在局限性。目前,k3s 不支持在主节点上运行除 SQLite 以外的任何其他数据库,也不支持多个主节点。因此,在选择默认容器编排器时,定义需求和目标非常重要。 我希望你在这篇文章之后对 Kubernetes 和 k3s 有相当程度的了解。如果您想学习和探索,官方教程将是一个很好的起点。 转自:https://www.modb.pro/db/161082 原文链接:https://www.cnblogs.com/yuwen01/p/16470772.html...

    2024-02-18 技术 47
  • ubuntu防火墙和端口开放状态查看、开启和关闭

    本文主要介绍ubuntu的防火墙开放端口、ubuntu防火墙关闭、开启、重启、开启/禁用相应端口等相关命令使用。   1、ubuntu的防火墙启用   sudo ufw enable   sudo ufw default deny   作用:开启了防火墙并随系统启动同时关闭所有外部对本机的访问(本机访问外部正常)。   2、ubuntu的防火墙关闭   sudo ufw disable   3、ubuntu查看防火墙状态命令   sudo ufw status   4、开启/禁用相应端口或服务举例   进入Ubuntu 查看80端口的情况,发现80端口并未开启;   netstat -ntlp | grep 80   5、允许外部访问80端口   sudo ufw allow 80   6、禁止外部访问80 端口   sudo ufw delete allow 80   7、允许此IP访问所有的本机端口   sudo ufw allow from 192.168.1.1   8、禁止外部访问smtp服务   sudo ufw deny smtp   9、删除上面建立的某条规则   sudo ufw delete allow smtp   10、要拒绝所有的TCP流量从10.0.0.0/8 到192.168.0.1地址的22端口   sudo ufw deny proto tcp from 10.0.0.0/8 to 192.168.0.1 port 22   11、可以允许所有RFC1918网络(局域网/无线局域网的)访问这个主机(/8,/16,/12是一种网络分级):   sudo ufw allow from 10.0.0.0/8   sudo ufw allow from 172.16.0.0/12   sudo ufw allow from 192.168.0.0/16   推荐设置   sudo apt-get install ufw   sudo ufw enable   sudo ufw default deny   这样设置已经很安全,如果有特殊需要,可以使用   sudo ufw allow  开启相应服务。...

    2024-01-18 技术 73
  • ubuntu 如果使用命令修改系统的时区

    要在Ubuntu上更改时区,可以按照以下步骤进行操作: 打开终端(Terminal),如果不是管理执行:sudo -i 然后输入密码切换到root下: 1、使用命令timedatectl list-timezones | grep "Asia/Shanghai"来查看当前系统支持的所有时区列表中包含"Asia/Shanghai"关键字的结果。如果没有安装 tzdata 软件包,则需先运行 sudo apt install tzdata 安装该软件包。 选择合适的时区并记住其名称,比如我们选择了"Asia/Shanghai"。 输入命令sudo timedatectl set-timezone Asia/Shanghai将时区设置为"Asia/Shanghai"。根据提示输入管理员密码确认操作。 重新启动计算机或者通过命令source /etc/profile立即生效。现在就已经成功地将Ubuntu的时区更改为"Asia/Shanghai"。 同时执行同步时间命令: 如果没有ntpdate命令 可以使用 sudo apt install update -y 安装 注意事项: 这些步骤会影响到整个系统的时间显示和日期相关的应用程序。 若想永久性地保存时区设置,可以编辑 /etc/default/rcS 文件,添加 UTC=no 参数后再次重启系统。...

    2024-01-18 技术 69
  • Linux运维工程师:30道面试题整理【转】

    1.linux 如何挂在 windows 下的共享目录 mount.cifs //192.168.1.3/server /mnt/server -o user=administrator,pass=123456 linux 下的 server 需要自己手动建一个  后面的 user 与 pass 是 windows 主机的账号和密码 注意空格 和逗号 2.查看 http 的并发请求数与其 TCP 连接状态 netstat -n | awk '/^tcp/ {++b[$NF]} END {for(a in b) print a, b[a]}' 还有 ulimit -n 查看 linux 系统打开最大的文件描述符,这里默认 1024,不修改这里 web 服务器修改再大也没用。若要用就修改很几个办法,这里说其中一个: 修改/etc/security/limits.conf * soft nofile 10240* hard nofile 10240 重启后生效 3.用 tcpdump 嗅探 80 端口的访问看看谁最高 tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr |head -5&nbsp; 4.查看/var/log 目录下文件数 ls /var/log/ -lR| grep "^-" |wc -l 5.查看当前系统每个 IP 的连接数 netstat -n | awk '/^tcp/ {print $5}'| awk -F: '{print $1}' | sort | uniq -c | sort -rn 6.shell 下 32 位随机密码生成 cat /dev/urandom | head -1 | md5sum | head -c 32 >> /pass 将生成的 32 位随机数 保存到/pass 文件里了 7.统计出 apache 的 access.log 中访问量最多的 5 个 IP  cat access_log | awk  '{print $1}' | sort | uniq -c | sort -n -r | head -5 8.如何查看二进制文件的内容 我们一般通过 hexdump 命令 来查看二进制文件的内容。 hexdump -C XXX(文件名)  -C 是参数 不同的参数有不同的意义 -C  是比较规范的 十六进制和 ASCII 码显示 -c  是单字节字符显示 -b  单字节八进制显示 -o  是双字节八进制显示 -d  是双字节十进制显示 -x  是双字节十六进制显示 等等等等 9.ps aux 中的 VSZ 代表什么意思,RSS 代表什么意思 VSZ:虚拟内存集,进程占用的虚拟内存空间 RSS:物理内存集,进程战用实际物理内存空间 10.检测并修复/dev/hda5 fsck 用来检查和维护不一致的文件系统。若系统掉电或磁盘发生问题,可利用 fsck 命令对文件系统进行检查,用法: 11.Linux 系统的开机启动顺序 加载 BIOS–>读取 MBR–>Boot Loader–>加载内核–>用户层 init 一句 inittab 文件来设定系统运行的等级(一般 3 或者 5,3 是多用户命令行,5 是界面)–>init 进程执行 rc.syninit–>启动内核模块–>执行不同级别运行的脚本程序–>执行/etc/rc.d/rc.local(本地运行服务)–>执行/bin/login,就可以登录了。 12.符号链接与硬链接的区别 我们可以把符号链接,也就是软连接 当做是 windows 系统里的 快捷方式。 硬链接 就好像是 又复制了一份. ln 3.txt 4.txt   这是硬链接,相当于复制,不可以跨分区,但修改 3,4 会跟着变,若删除 3,4 不受任何影响。 ln -s 3.txt 4.txt  这是软连接,相当于快捷方式。修改 4,3 也会跟着变,若删除 3,4 就坏掉了。不可以用了。 13.保存当前磁盘分区的分区表 dd 命令是以个强大的命令,在复制的同时进行转换 dd if=/dev/sda of=./mbr.txt bs=1 count=512 14..没有 14 题,我自己来个简单的,如何在文本里面进行复制、粘贴,删除行,删除全部,按行查找和按字母查找。 以下操作全部在命令行状态操作,不要在编辑状态操作。 在文本里 移动到想要复制的行  按 yy  想复制到哪就移动到哪,然后按 P  就黏贴了 删除行  移动到改行 按 dd 删除全部  dG  这里注意 G 一定要大写 按行查找  :90 这样就是找到第 90 行 按字母查找 /path  这样就是 找到 path 这个单词所在的位置,文本里可能存在多个,多次查找会显示在不同的位置。 15.手动安装 grub grub-install /dev/sda 16.修改内核参数 vi /etc/sysctl.conf  这里修改参数 sysctl -p  刷新后可用 17.在 1-39 内取随机数 expr $[$RANDOM%39] + 1 RANDOM 随机数 %39 取余数 范围 0-38 18.限制 apache 每秒新建连接数为 1,峰值为 3 每秒新建连接数 一般都是由防火墙来做,apache 本身好像无法设置每秒新建连接数,只能设置最大连接: iptables -A INPUT -d 172.16.100.1 -p tcp --dport 80 -m limit --limit 1/second  -j ACCEPT 硬件防火墙设置更简单,有界面化,可以直接填写数字。。。 最大连接 apache 本身可以设置 MaxClients 3  ,修改 apache 最大连接 前提还是要修改系统默认 tcp 连接数。我博客里也说了,这就不说了。 19.FTP 的主动模式和被动模式 FTP 协议有两种工作方式:PORT 方式和 PASV 方式,中文意思为主动式和被动式。 PORT(主动)方式的连接过程是:客户端向服务器的 FTP 端口(默认是 21)发送连接请 求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户端在命令链路上用 PORT 命令告诉服务器:“我打开了 XX 端口,你过来连接我”。于是服务器从 20 端口向客户端的 XX 端口发送连接请求,建立一条数据链路来传送数据。 PASV(被动)方式的连接过程是:客户端向服务器的 FTP 端口(默认是 21)发送连接请 求,服务器接受连接,建立一条命令链路。当需要传送数据时,服务器在命令链路上用 PASV 命令告诉客户端:“我打开了 XX 端口,你过来连接我”。于是客户端向服务器的 XX 端口 发送连接请求,建立一条数据链路来传送数据。 从上面可以看出,两种方式的命令链路连接方法是一样的,而数据链路的建立方法就完 全不同。 20.显示/etc/inittab 中以#开头,且后面跟了一个或者多个空白字符,而后又跟了任意非空白字符的行 grep "^# \{1,\}[^ ]" /etc/inittab 21.显示/etc/inittab 中包含了:一个数字:(即两个冒号中间一个数字)的行 grep "\:[0-9]\{1\}\:" /etc/inittab 22.怎么把脚本添加到系统服务里,即用 service 来调用 在脚本里加入 #!/bin/bash# chkconfig: 345 85 15# description: httpd 然后保存 chkconfig httpd –add  创建系统服务 现在就可以使用 service 来 start or restart 23.写一个脚本,实现批量添加 20 个用户,用户名为 user01-20,密码为 user 后面跟 5 个随机字符 #!/bin/bash#description: useraddfor i in `seq -f"%02g" 1 20`;douseradd user$iecho "user$i:`echo $RANDOM|md5sum|cut -c 1-5`"|passwd –stdinuser$i >/dev/null 2>&1done 24.写一个脚本,实现判断 192.168.1.0/24 网络里,当前在线的 IP 有哪些,能 ping 通则认为在线 #!/bin/bashfor ip in `seq 1 255` do { ping -c 1 192.168.1.$ip > /dev/null 2>&1 if [ $? -eq 0 ]; then echo 192.168.1.$ip UP else echo 192.168.1.$ip DOWN fi }&donewait 25.写一个脚本,判断一个指定的脚本是否是语法错误;如果有错误,则提醒用户键入 Q 或者 q 无视错误并退出其它任何键可以通过 vim 打开这个指定的脚本 [root@localhost tmp]# cat checksh.sh #!/bin/bash read -p "please input check script-> " file if [ -f $file ]; then sh -n $file > /dev/null 2>&1 if [ $? -ne 0 ]; then read -p "You input $file syntax error,[Type q to exit or Type vim to edit]" answer case $answer in q | Q) exit 0 ;; vim ) vim $file ;; *) exit 0 ;; esac fi else echo "$file not exist" exit 1 fi 26、写一个脚本:(26 包括 3 个小题) 1、创建一个函数,能接受两个参数: 1)第一个参数为 URL,即可下载的文件;第二个参数为目录,即下载后保存的位置; 2)如果用户给的目录不存在,则提示用户是否创建;如果创建就继续执行,否则,函数返回一个 51 的错误值给调用脚本; 3)如果给的目录存在,则下载文件;下载命令执行结束后测试文件下载成功与否;如果成功,则返回 0 给调用脚本,否则,返回 52 给调用脚本; [root@localhost tmp]# cat downfile.sh#!/bin/bashurl=$1dir=$2download() { if [[ ! -d $dir ]];then read -p "$dir No such directory,create?(y/n)" answer if [[ "$answer" == "y" ]];then mkdir -p $dir else return "51" fi fi cd $dir && wget $url >/dev/null 2>&1 if [ $? -ne 0 ]; then return "52" fi return 0}download $url $direcho $? 27、写一个脚本:(27 包括 2 个小题) 1、创建一个函数,可以接受一个磁盘设备路径(如/dev/sdb)作为参数;在真正开始后面步骤之前提醒用户有危险,并让用户选择是否继续;而后将此磁盘设备上的所有分区清空(提示,使用命令 dd if=/dev/zero of=/dev/sdb bs=512 count=1 实现,注意其中的设备路径不要写错了; 如果此步骤失败,返回 67 给主程序; 接着在此磁盘设备上创建两个主分区,一个大小为 100M,一个大小为 1G;如果此步骤失败,返回 68 给主程序; 格式化此两分区,文件系统类型为 ext3;如果此步骤失败,返回 69 给主程序; 如果上述过程都正常,返回 0 给主程序; 2、调用此函数;并通过接收函数执行的返回值来判断其执行情况,并将信息显示出来; if [[ -n $1 && $1 =~ "/dev/sd[a-z]" ]];then local Darray=(`ls /dev/sd[a-z]`) for i in ${Darray};do [[ "$i" == "$1" ]] && Sd=$i && break doneelse return 66fi#当匹配成功,进入选择,告诉用户,是否继续,输错的话进入无限循环,当用户选择 Y,则清空目标分区,且跳出 while 循环while :;do read -p "Warning!!!This operation will clean $Sd data.Next=y,Quit=n [y|n]:" Choice case $Choice iny) dd if=/dev/zero of=$Sd bs=512 count=1 &> /dev/null &&break || return 67 ;;n) exit 88 ;;*) echo "Invalid choice,please choice again." ;;esacdone #使用 echo 传递给 fdisk 进行分区,如果此命令失败,则跳转出去,错误值 68,需要注意的是,有时候这个返回值很诡异,笔者之前成功与否都是返回的 1,后来重启之后,就好了,如果慎重的话,可以对创建的分区,进行判断,不过就需要使用其他工具截取相关字段了,虽有些小麻烦,但无大碍 echo-e "n\np\n1\n\n+100M\nn\np\n2\n\n+1024M\nw\n"|fdisk /dev/sdb&> /dev/null || return 68 #格式化之前,让内核重新读取磁盘分区表,值得注意的是,有的系统版本,使用 partprobe 无效,譬如笔者的环境是 rhel5.8,而 rhel6.0 以后,这个命令就很危险了,而使用 partx -a /dev/sdb 则效果更好…此项需慎重,如果格式化失败,则告知把失败的分区定义成变量,且跳出函数,并带出错误值 69 `partprobe`Part=`fdisk -l /dev/$Sd|tail -2|cut -d” ” -f1`for M in ${Part};do mke2fs -j $M &> /dev/null && ErrorPart=$M &&return 69done return 0} #下面代码,调用函数,接收函数返回值,根据返回值进行判断哪里出错。 Disk_Mod $1Res=$?[ $Res-eq 0 ] && exit 0[ $Res-eq 66 ] && echo "Error! Invalid input."[ $Res-eq 67 ] && echo "Error! Command -> dd <- Faild."[ $Res-eq 68 ] && echo "Error! Command -> fdisk <- Faild."[ $Res-eq 69 ] && echo "Error! Command -> mke2fs <- Faild."...

    2024-01-06 技术 89
  • ps查看按内存排序的前10个进程

    ps查看按内存排序的前2个进程 ps auxw|head -1;ps auxw|grep -v PID|sort -rn -k4|head -10 ...

    2023-12-17 技术 152
  • K8S工作节点运行kubectl命令报错的原因及解决办法

    K8S工作节点运行kubectl命令报错:The connection to the server localhost:8080 was refused - did you specify the right host or port?。 原因分析: 这是因为kubectl命令需要使用kubernetes-admin来运行,而工作节点上如果没有配置好相关的权限是无法执行的。可以用kubectl config view 命令查看,如下图 可以看出节点2上是没有权限执行的。 解决办法: 1、将主节点中的【/etc/kubernetes/admin.conf】文件拷贝到从节点1相同目录下。如图 2、回到工作节点1上配置环境变量: echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile 如图: 3、加载配置信息, source ~/.bash_profile 4、查验是否正常执行kubectl命令. ...

    2023-11-25 技术 246
  • Kubernetes 常用命令汇总

    # 通过文件名或标准输入创建资源。 kubectl create   # 读取指定文件内容,进行创建。(配置文件可指定json,yaml文件)。   kubectl create -f 配置文件   # 创建指定文件内容,创建并指定服务版本。(配置文件可指定json,yaml文件)。   kubectl create -f 配置文件 --edit --output-version=版本号 -o json # 将一个资源公开为一个新的Kubernetes服务,暴露服务。 kubectl expose   # 创建Kubernetes 资源类型,并添加暴露端口。   kubectl expose 资源类型 资源名称 --port=暴露端口 --target-port=容器端口   # 创建Kubernetes service 服务,并添加暴露端口。   kubectl expose service 资源名称 --port=暴露端口 --target-port=容器端口 --name=创建服务名称   # 创建Kubernetes ,并添加UDP暴露端口,使用默认容器端口。   kubectl expose 资源类型 资源名称 --port=暴露端口 --protocol=udp --name=创建服务名称   # 创建Kubernetes服务,根据yaml文件,并添加暴露端口。(配置文件可指定json,yaml文件)。   kubectl expose -f 配置文件 --port=暴露端口 --target-port=容器端口 # 创建并运行一个特定的镜像,可能是副本。创建一个deployment或job管理创建的容器。 kubectl run   # 创建一个镜像,运行。   kubectl run 容器名 --image=镜像名   # 创建一个镜像,运行。并启用暴露端口。   kubectl run 容器名 --image=镜像名 --port=暴露端口   # 创建一个镜像,运行。并引入变量。   kubectl run 容器名 --image=镜像名 --env=“变量”   # 创建一个镜像,运行。并引入标签。   kubectl run 容器名 --image=镜像名 --labels="key=value,env=prod"   # 创建一个镜像,运行。并设置副本数。默认1。   kubectl run 容器名 --image=镜像名 --replicas=副本数   # 创建一个镜像,运行。并添加-i-t访问容器终端。并设置重启策略(Never不重启)。   kubectl run -i -t 容器名 --image=镜像名 --restart=重启策略   # 创建一个镜像,运行。并指定容器内执行指定命令。   kubectl run 容器名 --image=镜像名 --command -- 指定命令 删 # 通过文件名、标准输入、资源名称或标签选择器来删除资源 kubectl delete   # 删除指定资源。   kubectl delete 资源类型 资源名   # 删除所有指定资源。   kubectl delete 资源类型 -all   # 通过指定文件删除指定资源。(配置文件.json .yaml)   kubectl delete -f 配置文件 # 维护期间排除容器名 kubectl drain   # 排除指定容器名。   kubectl drain 容器名 改 # 配置应用资源。修改现有应用程序资源。 kubectl set   # 更新pod内的环境变量。   kubectl set env 资源类型 资源名称 添加变量=值   # 更新pod镜像。   kubectl set image 资源类型 资源名称 容器名=升级镜像版本   # 更新pod内的资源。   kubectl set resources 资源类型 资源名称 [请求——限制= & =请求][选项]   # 通过配置文件更新pod内的资源。(配置文件.json .yaml)   kubectl set resources -f 配置文件 # 使用默认的编辑器编辑一个资源。 kubectl edit   # 动态更新服务配置参数。   kubectl edit 资源类型 资源名称 # 管理资源的发布。 kubectl rollout   # 回滚到上一个版本。   kubectl rollout undo 资源类型 资源名称   # 指定版本回滚。   kubectl rollout undo 资源类型 资源名称 --to-revision=3   # 查看当前的资源状态。   kubectl rollout status 资源类型 资源名称   # 查看历史修订版本   kubectl rollout history 资源类型 资源名称   # 查看指定历史修订版本   kubectl rollout history 资源类型 资源名称 --revision=版本数 # 执行指定复制控制的滚动更新。 kubectl rolling-update   # 滚动更新v1版本,通过json配置文件跟新到v2版本。   kubectl rolling-update 服务名称-v1 -f 服务名称-v2.json   # 滚动更新v1版本,到v2,并指定更新镜像。   kubectl rolling-update 服务名称-v1 服务名称-v2 --image=image:v2 # 扩容或缩容Pod数量,Deployment、ReplicaSet、RC或Job kubectl scale   # 扩容缩容副本数。   kubectl scale --replicas=副本数 资源类型 资源名称   # 扩容缩容副本数。对多个资源扩容。   kubectl scale --replicas=副本数 资源类型/资源名称1 资源类型/资源名称2   # 扩容缩容副本数。如果当前副本数为N个就扩容为Y个。   kubectl scale --current-replicas=副本数N --replicas=副本数Y 资源类型 资源名称 # 创建一个自动选择扩容或缩容并设置Pod数量 kubectl autoscale   # 设置该资源类型的副本数自动扩容到相关值   kubectl autoscale 资源类型 资源名称 --min=最小值 --max=最大值   # 设置该资源类型的副本数自动扩容到相关值。并根据CPU阈值扩容缩容。   kubectl autoscale 资源类型 资源名称 --max=最大值 --最小值 --cpu-percent=80 # 修改证书资源。 kubectl certificate # 标记节点不可调度 kubectl cordon   # 标记指定节点不可调度   kubectl cordon 节点名 # 标记节点可调度 kubectl uncordon   # 标记指定节点可调度   kubectl uncordon 节点名 # 更新一个或多个节点上的nodes。 kubectl taint # 执行命令到容器。 kubectl exec   # 执行指定命令到容器中。   kubectl exec 容器名 命令   # 分配伪终端已宿主级向容器添加命令。   kubectl exec 容器名 -- bash -c “命令”   # 进入指定节点容器内。   kubectl exec 容器名 -it bash # 转发一个或多个本地端口到一个pod。 kubectl port-forward   # 将宿主级端口转发到容器中。   kubectl port-forward 容器名 宿主级端口:容器端口 # 为kubernetes API Server启动服务代理 kubectl proxy # 拷贝文件或目录到容器中。 kubectl cp # 附加到一个进程到一个已经运行的容器。 kubectl attach   # 进入到一个运行的容器终端。   kubectl attach 容器名 # 通过文件名或标准输入对资源应用配置 kubectl apply # 更新部署配置文件信息(配置文件格式.json .yaml) kubectl apply -f 配置文件 # 使用补丁修改、更新资源的字段。 kubectl patch # 通过文件名或标准输入替换一个资源。 kubectl replace   # 重新创建配置文件内的资源 。配置文件可是(.yaml、.json)   kubectl replace -f 配置文件 --force # 不同的API版本之间转换配置文件。YAML和JSON格式都接受。 kubectl convert # 更新资源上的标签 kubectl label # 在一个或多个资源上更新注释。 kubectl annotate # 修改kubeconfig文件(用于访问API,比如配置认证信息) kubectl config 查 # 显示一个或多个资源 kubectl get   # 查看组件运行状态   kubectl get componentstatus   # 查看节点加入信息   kubectl get node   # 查看所有资源   kubectl get all   # 查看pods状态   kubectl get pods   # 查看pods及运行节点位置,查看更多信息   kubectl get pods -o wide # 查看pods下其他命名空间(kube-system等) kubectl get pods -n 命名空间   # 查看endpoints节点   kubectl get endpoints   # 查看sservice暴露宿主级访问地址描述信息   kubectl get service   # 根据标签查找资源描述信息。--output=wide查看更多信息。   kubectl get 资源类型 --selector="key=value" --output=wide   # 查看资源所有标签   kubectl get 资源类型 --show-labels   # 根据标签查看资源   kubectl get 资源类型 -l app=example   # 查看指定命名空间的资源   kubectl get 资源类型 --namespace=kube-system # 查看命名空间 kubectl get ns # 文档参考资料,可查看yaml文件字段指令含义。 kubectl explain   # 获得资源的特定字段的文档   kubectl explain pods.spec.containers   # 获得资源及其字段的文档   kubectl explain pods # 显示集群信息 kubectl cluster-info   # 显示详细集群信息   kubectl cluster-info dump # 显示资源(CPU/Memory/Storage)使用。需要Heapster运行。 kubectl top # 显示特定资源或资源组的详细信。 kubectl describe   # 查看资源详细信息   kubectl describe 资源类型 资源名称   # 指定标签。详细信息。   kubectl describe 资源类型 -l name=标签名 # 查看node资源使用详情信息 kubectl describe nodes NodeIP # 在od或指定的资源中容器打印日志。如果od只有一个容器,容器名称是可选的。 kubectl logs   # 查看指定节点服务日志。   kubectl logs 容器名   # 查看指定容器日志。   kubectl logs pod 节点名 -c 容器名   # 查看指定容器日志。实时查看。   kubectl logs pod 容器名 -f   # 通过标签查看容器日志   kubectl logs -l key=value 其他 # 检查认证授权 kubectl auth # 用于实现kubectl工具自动补全 kubectl completion # 执行实现自动补全动作 source <(kubectl completion bash) # 打印受支持的API版本 kubectl api-versions # 所有命令帮助。 kubectl help # 运行一个命令行插件。 kubectl plugin # 打印客户端和服务版本信息 kubectl version kubernetes官网 https://kubernetes.io/ kubernetes官方文档其他命令 https://v1-8.docs.kubernetes.io/docs/reference/generated/kubectl/kubectl-commands...

    2023-11-24 技术 111
  • ubuntu 安装k8s

    在vmware创建3台虚拟机,配置,4g/2vCPU/30G,ubuntu系统:Ubuntu 20.04.6。 实验环境规划: 两台机器: 192.168.40.101是k8s控制节点 192.168.40.103是k8s工作节点 1、修改主机名 控制节点:hostnamectl set-hostname umaster1 &&bash nodea节点:hostnamectl set-hostname unode1 &&bash 2、更新apt源及安装基础软件包 控制节点:root@umaster1:~# apt-get update && sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common gnupg2 node节点:root@unode1:~# apt-get update && sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common gnupg2 把下载的key添加到本地trusted数据库中 控制节点:、root@umaster1:~# curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add - OK node节点: curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add - OK 3、配置同步时间 4、设置计划同步crontab root@umaster1:~# apt install cron #安装crontab服务 Reading package lists... Done Building dependency tree Reading state information... Done cron is already the newest version (3.0pl1-136ubuntu1). cron set to manually installed. The following packages were automatically installed and are no longer required: gir1.2-goa-1.0 libfwupdplugin1 libxmlb1 Use 'apt autoremove' to remove them. 0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded. root@umaster1:~# service cron start #启动crontab进程 root@umaster1:~# systemctl enable cron --now #设置随机启动 Synchronizing state of cron.service with SysV service script with /lib/systemd/systemd-sysv-install. Executing: /lib/systemd/systemd-sysv-install enable cron root@umaster1:~# crontab -e 创建计划任务, no crontab for root - using an empty one crontab: installing new crontab root@umaster1:~# crontab -l #查看配置 * */1 * * * /usb/sbin/ntpdate cn.pool.ntp.org #每一小时同步一次 node节点可同步执行相同命令。 4、关闭防火墙和交换分区 1)查看防火墙,其中防火墙状态是active则表明防火墙是开启状态,而inactive则是关闭状态。 : 关闭防火墙执行命令:sudo ufw disable 2)关闭交换分区:执行命令:sudo swapoff -a 5、允许 iptables 检查桥接流量(所有节点) 1.加载overlay和br_netfilter两个内核模块 sudo modprobe overlay && sudo modprobe br_netfilter 持久化加载上述两个模块,避免重启失效。 2、修改内核参数,确保二层的网桥在转发包时也会被iptables的FORWARD规则所过滤. root@umaster1:~# cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_foword = 1 EOF 6、设置稳定版仓库 所有节点执行命令:root@umaster1:~# add-apt-repository "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/ $(lsb_release -cs) stable" 7、安装Docker 所有节点执行安装命令: root@umaster1:~# apt-get install docker-ce docker-ce-cli containerd.io -y root@unode1:~# apt-get install docker-ce docker-ce-cli containerd.io -y 8、配置Docker驱动 1、root@umaster1:~#cat <<EOF | tee /etc/docker/daemon.json { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2" } EOF 然后执行以下操作: mkdir -pv /etc/systemd/system/docker.service.d #创建docker服务进程 systemctl daemon-reload #加载配置文件 systemctl restart docker #重启docker systemctl enable docker --now #设置docer随机启动 如下图 生产节点node1也执行相同的操作,也可以同步进行。 检查docker是否正常 9、安装k8s 控制节点操作命令: 1):apt-get update && apt-get install -y apt-transport-https curl #升级并安装依赖包 2):新增国内科大的软件源 cat <<EOF >/etc/apt/sources.list.d/kubernetes.list deb http://mirrors.ustc.edu.cn/kubernetes/apt kubernetes-xenial main EOF # 3)执行更新:apt-get update 如果遇到以下报错, 可以通过以下方法解决: 执行命令: apt-key adv --recv-keys --keyserver keyserver.ubuntu.com +报错缺少的key 如上图的报错解决:执行命令:root@umaster1:~# apt-key adv --recv-keys --keyserver keyserver.ubuntu.com B53DC80D13EDEF05 执行安装k8s命令:安装kubelet,kubectl,kubeadm: 1)、root@umaster1:~# apt-get install -y kubelet=1.23.1-00 kubeadm=1.23.1-00 kubectl=1.23.1-00 2)、关闭k8s自动更新:root@umaster1:~# apt-mark hold kubelet kubeadm kubectl  3)、初始化k8s 执行以下命令: kubeadm init --apiserver-advertise-address 192.168.10.102 --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=SystemVerification 执行成功后有如下图示: 4)、创建用户操作 root@umaster1:~# mkdir -p $HOME/.kube root@umaster1:~# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config root@umaster1:~# sudo chown $(id -u):$(id -g) $HOME/.kube/config 5)、工作节点加入集群: kubeadm join 192.168.40.100:6443 --token u5jbsc.l3ya2fomnogcc68p \ --discovery-token-ca-cert-hash sha256:407c9c1d46a2a865ff46120be41d49d56d9aea310b8a35a56724b60f17a6449f 6)、...

    2023-11-22 技术 87
  • Ubuntu安装后开启终端端口22,远程连接

    1、打开终端窗口,执行:ifconfig 命令,如果提示没有些服务或者报错,说明没有安装net-tools工具。 执行安装命令:sudo apt install net-tools -y 2、查看需要开启的端口是否被占用 查询命令:netstat -lntp|grep 22 小注: -n 不以进程的服务名称,以编号port number显示 -t 列出tcp网络封包的信息 -l 列出目前正在网络监听listen服务 -p 列出该网络服务的进程 如果发现没有22端口进程,则执行如下命令 sudo apt-get install openssh-server sudo apt-get install ufw sudo ufw enable sudo ufw allow 22 3、最后能xshell连接是否成功,如果还不行请检查服务器防火墙是否开启端口,像阿里云,腾讯云等都需要在把端口打开才可以的。...

    2023-11-20 技术 256
  • k8s新增用户并授权其可查看所有名称空间的pod的权限

    本文记录了在k8s里新增用户并授权其可查看所有名称空间的pod的权限,当用户用此账号登陆后在k8s就只有查看Pods权限功能,而不能删除或者创建功能。 一、ssl认证 生成一个证书 (1)生成一个私钥 进入目录:cd /etc/kubernetes/pki/ 执行命令:(umask 077; openssl genrsa -out hiboy.key 2048) (2)生成一个证书请求 openssl req -new -key hiboy.key -out hiboy.csr -subj "/CN=hiboy" (3)生成一个证书 openssl x509 -req -in hiboy.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out hiboy.crt -days 3650 二、在k8s里新增加一个用户账号:hiboy (1)把hiboy这个用户添加到kubernetes集群中,可以用来认证apiserver的连接 [root@ctdmaster1 pki]# kubectl config set-credentials hiboy --client-certificate=./hiboy.crt --client-key=./hiboy.key --embed-certs=true (2)在kubeconfig下新增加一个hiboy账号context信息 kubectl config set-context hiboy@kubernetes --cluster=kubernetes --user=hiboy (3)创建一个集群角色(clusterrole) [root@ctdmaster1 ~]# vim hiboy-clusterrole.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: hiboy-get-pod rules: apiGroups: [""] resources: ["pods"] verbs: ["get", "list", "watch"] [root@ctdmaster1]# kubectl apply -f hiboy-clusterrole.yaml (4)创建一个clusterrolebinding [root@ctdmaster1]# kubectl create clusterrolebinding hiboy-get-pods --clusterrole=hiboy-get-pod --user=hiboy 三、账号信息配置 1、在系统添加一个hiboy的普通用户 useradd hiboy #新增系统用户 hiboy passwd hiboy #设置hiboy登陆密码(hi135246) [root@ctdmaster1 ~]# useradd hiboy [root@ctdmaster1 ~]# passwd hiboy 更改用户 hiboy 的密码 。 新的 密码: 重新输入新的 密码: passwd:所有的身份验证令牌已经成功更新。 2、调整修改账号配置信息(不要直接修改root/.kube/config的信息,不然K8s会问题) 复制一份k8s配置信息:cp -ar /root/.kube /tmp/ 修改/tmp/.kube/config文件,把kubernetes-admin和其他账号相关删除,只留hiboy用户 并把current-context变成如下:current-context: hiboy@kubernetes 3、把配置信息复制到hiboy目录下 cp -ar /tmp/.kube/ /home/hiboy/ chown -R hiboy.hiboy /home/hiboy/ 4、切换账号测试 su - hiboy kubectl get pods kubectl get pods -n kube-system 由上图可以,如果是新用户到hiboy登陆系统可以直接查到k8s里所有的pods信息,但是并不具备其他功能,如果需要其他权限也可以采取相类似的操作进行。...

    2023-11-18 技术 331

联系我们

在线咨询:点击这里给我发消息

微信号:a0668678

工作日:9:00-23:00,节假日休息

扫码关注