K8S容器内安装cur/telnet命令(Alpine Linux离线环境安装curl/telnet或其他工具)

本文主要是介绍K8S容器内安装cur/telnet命令(Alpine Linux离线环境安装curl/telnet或其他工具),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景

需求:

  • 微服务的基础是镜像,通常在最小化的Linux镜像中安装jdk,然后运行编译好的java程序。将镜像运行到K8S上就得到了微服务Pod,Pod通常使用安装K8S时配置的私有网段,与宿主机不同。
  • 很多时候需要排查从Pod网段内访问K8S宿主机网段、其它外部Linux网段或域名接口等等,需要在Pod容器内执行curl或telnet等常用命令。
  • 但普遍最常用的最小化的Linux容器镜像AlpineLinux中默认没有curl、telnet等工具,需要手动安装。

解决:

  • 方式一:(推荐不能停机的Pod使用)在个人电脑上创建可以上网的alpine Linux容器,获取curl安装包,传输到K8S容器内手动安装。
  • 方式二:(推荐可以停机、尚未上线的Pod使用)重新准备新的基础镜像供开发使用,制定标准,后续使用的最小化镜像都必须默认安装curl/telent等工具。

解决

方式一:容器不停机安装curl

简要步骤:

  1. 本地获取curl安装包:确认生产使用的alpine版本、拉取镜像运行容器、下载apk安装包。
  2. 将curl安装包复制到K8S宿主机:scp或lrzsz上传文件至K8S服务器。
  3. 将curl安装包复制到目标Pod容器:kubectl cp复制文件到具体容器。
  4. 容器内安装apk:登录容器安装curl。
  5. 测试curl的使用。
  6. 优点/缺点。

1.本地获取curl安装包:

确认生产alpine版本为3.8:
在K8S上,通过k9s工具/K8S-dashboard/docker exec等命令登录目标容器,执行命令cat /etc/os-release查看系统版本。

bash-4.4# hostname 
file-tg-cfd48df98-fnzbv
bash-4.4# cat /etc/os-release 
NAME="Alpine Linux"
ID=alpine
VERSION_ID=3.8.2
PRETTY_NAME="Alpine Linux v3.8"
HOME_URL="http://alpinelinux.org"
BUG_REPORT_URL="http://bugs.alpinelinux.org"
bash-4.4# 

在本人电脑(或其它运行docker可以上网的服务器)上,搜索拉取镜像,运行容器

PS C:\Users\Czm> docker pull alpine:3.8
3.8: Pulling from library/alpine
486039affc0a: Pull complete
Digest: sha256:2bb501e6173d9d006e56de5bce2720eb06396803300fe1687b58a7ff32bf4c14
Status: Downloaded newer image for alpine:3.8
docker.io/library/alpine:3.8
PS C:\Users\Czm> docker run -itd --name al38 alpine:3.8 /bin/sh
1e4353774d57297b44c10dafd4b30335015aae80bcee342dcf929bdf3f0bba92
PS C:\Users\Czm> docker ps
CONTAINER ID   IMAGE                                        COMMAND       CREATED         STATUS          PORTS     NAMES
1e4353774d57   alpine:3.8                                   "/bin/sh"     3 seconds ago   Up 2 seconds              al38

登录容器下载apk安装包:

PS C:\Users\Czm> docker exec -it al38 /bin/sh

更换alpine apk源为国内源:

# 清华大学源
sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories
# 阿里云源
sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
# 中科大源
sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories

创建存放apk的目录,下载curl及其依赖:

/ # mkdir curl
/ # cd curl/ 
/curl # apk fetch curl -R -o /curl
Downloading libssh2-1.9.0-r1
Downloading zlib-1.2.11-r1
Downloading musl-1.1.19-r11
Downloading libcurl-7.61.1-r3
Downloading busybox-1.28.4-r3
Downloading libressl2.7-libssl-2.7.5-r0
Downloading nghttp2-libs-1.39.2-r0
Downloading libressl2.7-libcrypto-2.7.5-r0
Downloading ca-certificates-20191127-r2
/curl # ls
busybox-1.28.4-r3.apk               curl-7.61.1-r3.apk                  libressl2.7-libcrypto-2.7.5-r0.apk  libssh2-1.9.0-r1.apk                nghttp2-libs-1.39.2-r0.apk
ca-certificates-20191127-r2.apk     libcurl-7.61.1-r3.apk               libressl2.7-libssl-2.7.5-r0.apk     musl-1.1.19-r11.apk                 zlib-1.2.11-r1.apk
/curl #
/curl # apk fetch busybox-extras -R -o /curl
Downloading busybox-extras-1.28.4-r3

打包所有apk文件为一个tar包,方便传输:

/ # tar -zcvf czm-231110-Alpine3.8-curl.telnet.tgz /curl/

2.将curl安装包复制到K8S宿主机:scp或lrzsz上传文件至K8S服务器。

退出容器命令行,返回Windows cmd,执行docker cp命令,复制tar包到Windows。

PS C:\Users\Czm> docker ps
CONTAINER ID   IMAGE                                        COMMAND       CREATED        STATUS        PORTS     NAMES
1e4353774d57   alpine:3.8                                   "/bin/sh"     16 hours ago   Up 16 hours             al38
3127f7c3a2bd   anapsix/alpine-java:8_server-jre_unlimited   "/bin/bash"   7 weeks ago    Up 17 hours             tz
PS C:\Users\Czm> docker cp al38:/czm-231110-Alpine3.8-curl.telnet.tgz d:/czm-231110-Alpine3.8-curl.telnet.tgz
Successfully copied 2.78MB to d:\czm-231110-Alpine3.8-curl.telnet.tgz
PS C:\Users\Czm>

将tar包传输到K8S服务器

[sysma@prod-k8s-0001 ~]$ pwd
/home/sysma
[sysma@prod-k8s-0001 ~]$ ll |grep Alpine
-rw-r--r-- 1 sysma sysma    2781771 Nov 10 10:07 czm-231110-Alpine3.8-curl.telnet.tgz

3.将curl安装包复制到目标Pod容器:kubectl cp复制文件到具体容器。

[sysma@prod-k8s-0001 ~]$ ll |grep Al
-rwxr-xr-x 1 sysma sysma        365 Oct 31 09:28 07_getAllDeploy.sh
-rw-r--r-- 1 sysma sysma    2781771 Nov 10 10:07 czm-231110-Alpine3.8-curl.telnet.tgz
drwxr-xr-x 5 sysma sysma        326 Nov  3 09:30 czm_BathAlterDeployEnv
[sysma@prod-k8s-0001 ~]$ kubectl cp czm-231110-Alpine3.8-curl.telnet.tgz file-tg-cfd48df98-fnzbv:/ -c file-tg -n media
Error from server (NotFound): pods "file-tg-cfd48df98-fnzbv" not found
[sysma@prod-k8s-0001 ~]$ kubectl cp czm-231110-Alpine3.8-curl.telnet.tgz file-tg-9b658c46-xkd48:/ -c file-tg -n media
[sysma@prod-k8s-0001 ~]$ 

4. 容器内安装apk:登录容器安装curl。

使用K9S工具登录容器

选择不是sider-car的容器
在这里插入图片描述
刚才kubectl 复制的文件已经到了容器内部。
在这里插入图片描述
解压,然后安装curl工具,貌似apk无法自动解决依赖问题,需要按如下顺序安装之前下载的apk安装包:
在这里插入图片描述
实际操作如下:

bash-4.4# ls
busybox-1.28.4-r3.apk               libcurl-7.61.1-r3.apk               mii-tool-1.60_git20140218-r2.apk    zlib-1.2.11-r1.apk
busybox-extras-1.28.4-r3.apk        libressl2.7-libcrypto-2.7.5-r0.apk  musl-1.1.19-r11.apk
ca-certificates-20191127-r2.apk     libressl2.7-libssl-2.7.5-r0.apk     net-tools-1.60_git20140218-r2.apk
curl-7.61.1-r3.apk                  libssh2-1.9.0-r1.apk                nghttp2-libs-1.39.2-r0.apk
bash-4.4# apk add --no-network nghttp2-libs-1.39.2-r0.apk 
WARNING: Ignoring APKINDEX.adfa7ceb.tar.gz: No such file or directory
WARNING: Ignoring APKINDEX.efaa1f73.tar.gz: No such file or directory
(1/1) Installing nghttp2-libs (1.39.2-r0)
Executing glibc-bin-2.29-r0.trigger
OK: 24 MiB in 30 packages
bash-4.4# apk add --no-network libssh2-1.9.0-r1.apk 
WARNING: Ignoring APKINDEX.adfa7ceb.tar.gz: No such file or directory
WARNING: Ignoring APKINDEX.efaa1f73.tar.gz: No such file or directory
(1/1) Installing libssh2 (1.9.0-r1)
Executing glibc-bin-2.29-r0.trigger
OK: 24 MiB in 31 packages
bash-4.4# apk add --no-network libcurl-7.61.1-r3.apk 
WARNING: Ignoring APKINDEX.adfa7ceb.tar.gz: No such file or directory
WARNING: Ignoring APKINDEX.efaa1f73.tar.gz: No such file or directory
(1/1) Installing libcurl (7.61.1-r3)
Executing glibc-bin-2.29-r0.trigger
OK: 24 MiB in 32 packages
bash-4.4# apk add --no-network curl-7.61.1-r3.apk 
WARNING: Ignoring APKINDEX.adfa7ceb.tar.gz: No such file or directory
WARNING: Ignoring APKINDEX.efaa1f73.tar.gz: No such file or directory
(1/1) Installing curl (7.61.1-r3)
Executing busybox-1.28.4-r3.trigger
OK: 24 MiB in 33 packages
bash-4.4# 

5. 测试curl的使用。

从容器内部发送任意curl请求,成功。如图是post请求发送一个500MB文件到对端服务器
在这里插入图片描述

6. 优点/缺点。

优点:pod不用重启,业务不用中断。
缺点:传输安装包复杂,需要提前准备相同版本alpine系统镜像。容器重启后curl、telnet工具丢失,还得重复再装一次。

方式二:容器停机,改为使用自定义基础镜像

就不详细写了,需要详细过程的留言。
简要步骤:

  1. 本地创建纯净alpine Linux容器
  2. 登录alpine Linux容器安装自定义软件
  3. 提交自定义容器为镜像:使用docker commit命令提交基础镜像。
  4. 联系开发更换底层基础镜像:将自定义镜像推送至harbor仓库,通知开发修改dockerfile,将FROM 基础镜像修改为自定已经向。
  5. 重新部署并登录容器测试:登录容器后,自带curl和其他命令。
    优点:一劳永逸,一次安装之后多次更新微服务都能在基础镜像容器中使用curl命令。
    缺点:容器需要重新发布,业务需要中断。

结束

这篇关于K8S容器内安装cur/telnet命令(Alpine Linux离线环境安装curl/telnet或其他工具)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/383825

相关文章

Zookeeper安装和配置说明

一、Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式。 ■ 单机模式:Zookeeper只运行在一台服务器上,适合测试环境; ■ 伪集群模式:就是在一台物理机上运行多个Zookeeper 实例; ■ 集群模式:Zookeeper运行于一个集群上,适合生产环境,这个计算机集群被称为一个“集合体”(ensemble) Zookeeper通过复制来实现

CentOS7安装配置mysql5.7 tar免安装版

一、CentOS7.4系统自带mariadb # 查看系统自带的Mariadb[root@localhost~]# rpm -qa|grep mariadbmariadb-libs-5.5.44-2.el7.centos.x86_64# 卸载系统自带的Mariadb[root@localhost ~]# rpm -e --nodeps mariadb-libs-5.5.44-2.el7

Centos7安装Mongodb4

1、下载源码包 curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.1.tgz 2、解压 放到 /usr/local/ 目录下 tar -zxvf mongodb-linux-x86_64-rhel70-4.2.1.tgzmv mongodb-linux-x86_64-rhel70-4.2.1/

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

Centos7安装JDK1.8保姆版

工欲善其事,必先利其器。这句话同样适用于学习Java编程。在开始Java的学习旅程之前,我们必须首先配置好适合的开发环境。 通过事先准备好这些工具和配置,我们可以避免在学习过程中遇到因环境问题导致的代码异常或错误。一个稳定、高效的开发环境能够让我们更加专注于代码的学习和编写,提升学习效率,减少不必要的困扰和挫折感。因此,在学习Java之初,投入一些时间和精力来配置好开发环境是非常值得的。这将为我

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

高效录音转文字:2024年四大工具精选!

在快节奏的工作生活中,能够快速将录音转换成文字是一项非常实用的能力。特别是在需要记录会议纪要、讲座内容或者是采访素材的时候,一款优秀的在线录音转文字工具能派上大用场。以下推荐几个好用的录音转文字工具! 365在线转文字 直达链接:https://www.pdf365.cn/ 365在线转文字是一款提供在线录音转文字服务的工具,它以其高效、便捷的特点受到用户的青睐。用户无需下载安装任何软件,只

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal