首页
提效神器
常用运维脚本汇总
电子书阅读
推荐
电子书阅读
事物管理
Search
1
安装docker时报错container-selinux >= 2:2.74
208 阅读
2
rsync命令介绍(可替代rm删除巨量文件)
168 阅读
3
kubernetes集群各组件安装过程汇总
163 阅读
4
docker 镜像加速器配置,daemon.json文件详解
148 阅读
5
docker search命令提示i/o timeout的解决方案
106 阅读
运维
自动化运维
数据库
容器与k8s
环境
云计算
脚本
ai
登录
/
注册
Search
标签搜索
命令
nginx
zabbix
Mingrui
累计撰写
113
篇文章
累计收到
8
条评论
首页
栏目
运维
自动化运维
数据库
容器与k8s
环境
云计算
脚本
ai
页面
提效神器
常用运维脚本汇总
电子书阅读
推荐
电子书阅读
事物管理
搜索到
88
篇与
的结果
2025-03-26
k8s集群(containerd)安装——master篇
master安装环境配置禁用selinux sed -i '/^SELINUX=/s//SELINUX=disabled/' /etc/selinux/config禁用swap swapoff -a && sed -i '/swap/d' /etc/fstab禁用防火墙 yum -y remove firewalld修改hosts文件 echo "192.168.2.51 master" >> /etc/hosts不添加会有如下报错[root@master1 k8s]# kubeadm init --config=kubeadm.yml --dry-run [init] Using Kubernetes version: v1.28.0 [preflight] Running pre-flight checks [WARNING Hostname]: hostname "master" could not be reached [WARNING Hostname]: hostname "master": lookup master on 114.114.114.114:53: no such host [WARNING Service-Kubelet]: kubelet service is not enabled, please run 'systemctl enable kubelet.service' 设置网桥for i in overlay br_netfilter;do modprobe ${i} echo "${i}" >>/etc/modules-load.d/containerd.conf done cat >/etc/sysctl.d/99-kubernetes-cri.conf<<EOF net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 EOF sysctl --system安装软件包安装kubeadm、kubectl、kubelet、containerdyum install -y kubeadm kubelet kubectl containerd #安装代理软件包 yum install -y ipvsadm ipset设置开机自启动systemctl enable --now containerd systemctl enable --now kubelet#配置快捷键 source <(kubeadm completion bash|tee /etc/bash_completion.d/kubeadm) source <(kubectl completion bash|tee /etc/bash_completion.d/kubectl)修改containerd配置文件,安装crictl,详见文章 containerd安装与配置下载镜像#查看安装集群所需要的镜像信息 kubeadm config images list I0326 20:53:28.890691 6257 version.go:256] remote version is much newer: v1.32.3; falling back to: stable-1.28 registry.k8s.io/kube-apiserver:v1.28.15 registry.k8s.io/kube-controller-manager:v1.28.15 registry.k8s.io/kube-scheduler:v1.28.15 registry.k8s.io/kube-proxy:v1.28.15 registry.k8s.io/pause:3.9 registry.k8s.io/etcd:3.5.15-0 registry.k8s.io/coredns/coredns:v1.10.1 #将镜像信息保存到临时文件中,方便下一步操作 kubeadm config images list > a.txt # 下载所需要的镜像 for i in ` awk -F'/' '{print "registry.aliyuncs.com/google_containers/"$2}' a.txt` do crictl pull $i doneImage is up to date for sha256:9dc6939e7c573673801790fcfad6f994282c216e005578f5836b5fafc6685fc2 Image is up to date for sha256:10541d8af03f40fae257735edd69b6c5dd0084bb9796649409ac7b5660705148 Image is up to date for sha256:9d3465f8477c6b383762d90ec387c9d77da8a402a849265805f86feaa57aeeea Image is up to date for sha256:ba6d7f8bc25be40b51dfeb5ddfda697527ba55073620c1c5fa04a5f0ae9e3816 Image is up to date for sha256:e6f1816883972d4be47bd48879a08919b96afcd344132622e4d444987919323c Image is up to date for sha256:2e96e5913fc06e3d26915af3d0f2ca5048cc4b6327e661e80da792cbf8d8d9d4 Image is up to date for sha256:1cf5f116067c67da67f97bff78c4bbc76913f59057c18627b96facaced73ea0b [root@master1 ~]# crictl images ls IMAGE TAG IMAGE ID SIZE registry.aliyuncs.com/google_containers/coredns latest 1cf5f116067c6 20.9MB registry.aliyuncs.com/google_containers/etcd 3.5.15-0 2e96e5913fc06 56.9MB registry.aliyuncs.com/google_containers/kube-apiserver v1.28.15 9dc6939e7c573 34.4MB registry.aliyuncs.com/google_containers/kube-controller-manager v1.28.15 10541d8af03f4 33.3MB registry.aliyuncs.com/google_containers/kube-proxy v1.28.15 ba6d7f8bc25be 28.3MB registry.aliyuncs.com/google_containers/kube-scheduler v1.28.15 9d3465f8477c6 18.5MB registry.aliyuncs.com/google_containers/pause 3.9 e6f1816883972 322kB 初始化master集群#生成配置模版 kubeadm config print init-defaults > init.yaml修改配置文件nodeRegistration下name字段改为master(name: master)imageRepository字段改为阿里云的地址(imageRepository: registry.aliyuncs.com/google_containers)localAPIEndpoint字段下advertiseAddress修改为master的IP地址(advertiseAddress: 192.168.2.51)设置cgroupDriver为systemd---kind: KubeletConfigurationapiVersion: kubelet.config.k8s.io/v1beta1cgroupDriver: systemd使用--dry-run模拟安装过程,查看是否有报错kubeadm init --config=init.yaml --dry-run #输出信息若干,没有 Error 和 Warning 就是正常正式部署masterrm -rf /etc/kubernetes/tmp kubeadm init --config=init.yaml |tee init/init.log #根据安装提示执行命令 mkdir -p $HOME/.kube cp -i /etc/kubernetes/admin.conf $HOME/.kube/config chown $(id -u):$(id -g) $HOME/.kube/config安装calico网络插件kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml查看集群状态#使用下面两条命令中的任意一条即可 kubectl -n kube-system get pods kubectl get pods -A NAME READY STATUS RESTARTS AGE calico-kube-controllers-658d97c59c-vkk2n 0/1 Pending 0 144m calico-node-2gjfd 0/1 Init:ImagePullBackOff 0 144m coredns-66f779496c-562gq 0/1 Pending 0 152m coredns-66f779496c-v4msh 0/1 Pending 0 152m etcd-master 1/1 Running 0 152m kube-apiserver-master 1/1 Running 0 152m kube-controller-manager-master 1/1 Running 0 152m kube-proxy-kwp62 1/1 Running 0 152m kube-scheduler-master 1/1 Running 0 152m等待几分钟后,calcio插件会变成Running状态kubectl get pods -A NAMESPACE NAME READY STATUS RESTARTS AGE kube-system calico-kube-controllers-658d97c59c-9z9km 1/1 Running 0 9m5s kube-system calico-node-7ftlf 1/1 Running 0 9m6s kube-system coredns-66f779496c-n7h9t 1/1 Running 0 20m kube-system coredns-66f779496c-x7tvt 1/1 Running 0 20m kube-system etcd-master 1/1 Running 0 20m kube-system kube-apiserver-master 1/1 Running 0 20m kube-system kube-controller-manager-master 1/1 Running 0 20m kube-system kube-proxy-tdp72 1/1 Running 0 20m kube-system kube-scheduler-master 1/1 Running 0 20m
2025年03月26日
65 阅读
0 评论
0 点赞
2025-03-26
Containerd 常见命令
nerdctlnerdctl是containerd客户端工具,使用语法与docker一致,推荐使用。地址:https://github.com/containerd/nerdctl/releases,其中完整版(nerdctl-full-2.0.4-linux-amd64.tar.gz)包含containerd以及runc、CNI等依赖。nerctl实现了许多docker不具备的功能,如延迟拉取镜像(lazy-pulling)、镜像加密(imgcrypt)等功能。containerd常见命令crictl:遵循 CRI 接口规范的一个命令行工具,通常用它来检查和管理容器运行时和镜像。ctr 是 containerd 的一个客户端工具命令dockerctrcrictl查看运行的容器docker psctr task ls/ctr container lscrictl ps查看镜像docker imagesctr image lscrictl images查看容器日志docker logs-crictl logs查看容器数据信息docker inspectctr container infocrictl inspect查看容器资源docker stats-crictl stats启动/关闭已有的容器docker start/stopctr task start/killcrictl start/stop运行一个新的容器docker runctr run-(最小单元为pod)打标签docker tagctr inage tag-创建一个新的容器docker createctr container createcrictl create导入镜像docker loadcri image import-导出镜像docker savecri image export-删除容器docker rmctr container rmcrictl rm删除镜像docker rmictr image rmcrictl rmi拉取镜像docker pullctr image pullcrictl pull推送镜像docker pushctr image push-登录或在容器内部执行命令docker exec-crictl exec清空不用的容器docker image prune-crictl rmi --prune
2025年03月26日
62 阅读
0 评论
0 点赞
2025-03-26
containerd安装与配置
新版本的kubernetes不在使用docker作为容器运行时,而是直接使用containerd。因此在安装kubernetes时需要安装containerd。安装安装containerd非常简单,配置好yum仓库,一条yum命令即可安装成功。#containerd网络仓库配置 dnf install -y yum-utils yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 添加仓库自:https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum -y install containerd安装完成之后需要修改配置文件。containerd安装完成后会默认在/etc/containerd/目录下生成一个配置文件config.toml,但是该文件缺少很多信息,因此我们需要重新生成一个配置文件,然后对新生成的配置文件进行修改。#生成新配置文件 containerd config default > /etc/containerd/config.toml修改配置信息修改Cgroup为systemd在[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] 下找到SystemdCgroup,将false改为true修改sandbox镜像地址把配置文件中的 sandbox_image = "registry.k8s.io/pause:3.6" 改为阿里云的地址 sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.8"sandbox_image 是容器运行时(如 containerd、CRI-O 等)或容器编排系统(如 Kubernetes)中一个关键配置参数,用于指定 沙箱容器(Sandbox Container) 的基础镜像。沙箱容器是一个特殊的容器,用于为其他容器提供共享的底层环境(如网络、IPC 命名空间等)。例如:在 Kubernetes 中,每个 Pod 的第一个容器就是沙箱容器(称为 pause 容器),它负责维持 Pod 的网络命名空间。配置镜像加速# 修改配置文件,添加配置镜像加速相关信息的配置文件的路径 vim /etc/containerd/config.toml [plugins."io.containerd.grpc.v1.cri".registry] config_path = "/etc/containerd/certs.d" # 创建文件夹 mkdir -p /etc/containerd/certs.d/docker.io #创建配置文件 cat > /etc/containerd/certs.d/docker.io/hosts.toml << EOF server = "https://docker.io" [host."https://docker.1ms.run"] capabilities = ["pull", "resolve"] EOF说明:该配置方式对crictl命令有效,对ctr命令无效,使用ctr下载镜像时,需要指定镜像的地址和版本,如: ctr --debug=true image pull docker.1ms.run/busybox:latest{alert type="info"}特别提醒:在/etc/containerd/certs.d目录下,每个镜像加速地址都要放在单独的文件夹中,且这个文件夹必须以.io结尾,镜像加速地址的文件名称必须为hosts.toml{/alert}tree containerd/ containerd/ ├── certs.d │ └── docker.io │ └── hosts.toml └── config.toml 2 directories, 2 files 安装crictl工具#下载源码包 wget https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.29.0/crictl-v1.29.0-linux-amd64.tar.gz #解压缩 tar zxvf crictl-v1.29.0-linux-amd64.tar.gz -C /usr/local/bin # -C:指定解压缩后文件存放的位置修改配置文件cat > /etc/crictl.yaml <<EOF runtime-endpoint: unix:///run/containerd/containerd.sock image-endpoint: unix:///run/containerd/containerd.sock timeout: 10 debug: false EOF # 重启containerd systemctl restart containerd或者通过命令行工具修改crictl config runtime-endpoint unix:///run/containerd/containerd.sock crictl config image-endpoint unix:///run/containerd/containerd.sock安装cni插件在没有安装cni插件时,containerd会报错缺少cni插件。#下载安装包 wget https://github.com/containernetworking/plugins/releases/download/v1.4.0/cni-plugins-linux-amd64-v1.4.0.tgz #创建目录 mkdir -p /opt/cni/bin/ #解压缩 tar xzvf cni-plugins-linux-amd64-v1.4.0.tgz -C /opt/cni/bin/修改配置文件mkdir -p /etc/cni/net.d/ cat > /etc/cni/net.d/10-containerd-net.conflist <<EOF { "cniVersion": "1.0.0", "name": "containerd-net", "plugins": [ { "type": "bridge", "bridge": "cni0", "isGateway": true, "ipMasq": true, "promiscMode": true, "ipam": { "type": "host-local", "ranges": [ [{ "subnet": "10.88.0.0/16" }], [{ "subnet": "2001:4860:4860::/64" }] ], "routes": [ { "dst": "0.0.0.0/0" }, { "dst": "::/0" } ] } }, { "type": "portmap", "capabilities": {"portMappings": true} } ] } EOF [root@rocky9 ~]# systemctl restart containerd [root@rocky9 ~]# crictl info …… #重启containerd即可下载镜像示例[root@node-001 docker.io]# crictl pull httpd Image is up to date for sha256:83d938198316505b3aebd52bed1e54e5f2a49591cc41e09a30f480e5c00ea0cf [root@node-001 docker.io]# crictl pull nginx Image is up to date for sha256:53a18edff8091d5faff1e42b4d885bc5f0f897873b0b8f0ace236cd5930819b0 [root@node-001 docker.io]# crictl pull bitnami/php-fpm Image is up to date for sha256:0fdfdfd1cd46d5ef32ed47af20e8ae3ad58b0f4d62516519994bf74b8f6611a5 [root@node-001 docker.io]# crictl images ls IMAGE TAG IMAGE ID SIZE docker.1ms.run/calico/cni v3.25.0 d70a5947d57e5 88MB docker.1ms.run/calico/node v3.25.0 08616d26b8e74 87.2MB docker.io/bitnami/php-fpm latest 0fdfdfd1cd46d 115MB docker.io/library/httpd latest 83d9381983165 58.5MB docker.io/library/nginx latest 53a18edff8091 72.2MB registry.aliyuncs.com/google_containers/kube-proxy v1.28.0 ea1030da44aa1 24.6MB registry.aliyuncs.com/google_containers/pause 3.9 e6f1816883972 322kB
2025年03月26日
100 阅读
1 评论
0 点赞
2025-03-06
docker search命令提示i/o timeout的解决方案
配置好docker的镜像加速器后,会发现一个奇怪的现象。如果使用docker search命令搜索某个容器,会得到i/o timeout 的错误信息,但是用docker pull命令下载镜像时,却可以下载。示例[root@10-60-14-211 lnmp]# docker search nginx Error response from daemon: Get "https://index.docker.io/v1/search?q=nginx&n=25": dial tcp 69.30.25.21:443: i/o timeout [root@10-60-14-211 ~]# docker pull nginx:1.27.4-perl 1.27.4-perl: Pulling from library/nginx 7cf63256a31a: Already exists bf9acace214a: Pull complete 513c3649bb14: Pull complete d014f92d532d: Pull complete 9dd21ad5a4a6: Pull complete 943ea0f0c2e4: Pull complete 103f50cb3e9f: Pull complete d8dfdc7acfb3: Pull complete Digest: sha256:74edc8744a1080ccd9f9719e51e7d885b65dedaf2164a246f1cbd328f20f5d2e Status: Downloaded newer image for nginx:1.27.4-perl docker.io/library/nginx:1.27.4-perl原因解读docker search:直接查询Docker Hub API (https://index.docker.io/v1),而不是通过配置的镜像源。docker pull:优先使用配置的镜像源,如果镜像源失败,尝试从Docker Hub拉取。这种差异的原因在于Docker的设计理念:搜索功能主要面向Docker Hub官方仓库,而镜像源主要用于拉取(docker pull)操作。解决方案在搜索镜像时加上镜像加速器的地址。[root@10-60-14-211 lnmp]# docker search 1ms.run/nginx NAME DESCRIPTION STARS OFFICIAL nginx Official build of Nginx. 20633 [OK] nginx/nginx-prometheus-exporter NGINX Prometheus Exporter for NGINX and NGIN… 47 nginx/nginx-ingress NGINX and NGINX Plus Ingress Controllers fo… 100 nginx/unit This repository is retired, use the Docker o… 65 nginx/nginx-ingress-operator NGINX Ingress Operator for NGINX and NGINX P… 2 nginx/nginx-quic-qns NGINX QUIC interop 1 nginx/unit-preview Unit preview features 0 nginx/nginxaas-loadbalancer-kubernetes 0 bitnami/nginx Bitnami container image for NGINX 196 ubuntu/nginx Nginx, a high-performance reverse proxy & we… 127 bitnamicharts/nginx Bitnami Helm chart for NGINX Open Source 0 rancher/nginx 2 kasmweb/nginx An Nginx image based off nginx:alpine and in… 8 linuxserver/nginx An Nginx container, brought to you by LinuxS… 224 redash/nginx Pre-configured nginx to proxy linked contain… 3 dtagdevsec/nginx T-Pot Nginx 0 paketobuildpacks/nginx 0 vmware/nginx 2 chainguard/nginx Build, ship and run secure software with Cha… 4 gluufederation/nginx A customized NGINX image containing a consu… 1 droidwiki/nginx 0 intel/nginx 0 circleci/nginx This image is for internal use 2 corpusops/nginx https://github.com/corpusops/docker-images/ 1 antrea/nginx Nginx server used for Antrea e2e testing 0
2025年03月06日
106 阅读
0 评论
0 点赞
2025-03-06
php容器的时区设置问题
{callout color="#f0ad4e"}背景说明:如今国内开源可用的docker镜像站越发稀少,很多镜像站关闭或不在提供服务。而搭建一个网站只用到少数的几个容器如nginx、php-fpm、mysql,没必要浪费资源买一台香港服务器去拉取这些镜像。解决办法是使用了目前还算稳定的 毫秒镜像 提供的镜像服务。 在1ms.run上搜索php-fpm容器的最新版本时,发现没有官方版本,于是使用了bitnami开源组织上传的镜像bitnami/php-fpm:latest。{/callout}在bitnami提供的php-fpm镜像中,容器使用的是UTC时间,也就是协调世界时(全球时间的基准),但我们使用的CST时区(UTC+8),这里就会出现一个问题:博客的发布时间与我们所处的时区有8小时的差距。因此需要修改php-fpm的默认时区设置。进入php-fpm容器查看时区设置情况#创建一个临时容器 docker run -itd --rm docker.1ms.run/bitnami/php-fpm #进入容器查看时区设置 root@f7f574667670:/app# echo $TZ root@f7f574667670:/app# date Thu Mar 6 01:24:24 UTC 2025 #发现容器使用的是UTC时间,且没有设置TZ环境变量第一个思路,修改compose文件php-fpm容器的环境变量,设置TZ的值为Asia/Shanghaivim compose.yaml …… php8.2: container_name: php8.4 image: docker.1ms.run/bitnami/php-fpm:latest environment: - TZ=Asia/Shanghai volumes: ……为了方便验证,不用每次都去容器里面进行查看时区情况,让deepseek写了一个简单的php脚本,只要浏览器访问这个脚步就可以得到容器的时区信息。<?php // 获取当前时间和时区 $current_time = date('Y-m-d H:i:s'); // 格式化当前时间 $current_timezone = date_default_timezone_get(); // 获取当前时区 // 输出结果 echo "当前时间:$current_time\n"; echo "当前时区:$current_timezone\n"; ?> 修改完配置信息,使用浏览器验证时发现php-fpm返回的仍然是UTC时间,问题出在哪里?再次进入php容器,查看环境变量设置是否生效root@f7f574667670:/app# echo $TZ Asia/Shanghai这里发现我们设置的环境变量是生效了的,但是php-fpm返回的时间却又是UTC的,那么下一步我们就去php的配置文件中查看有没有相关设置。修改php配置,使时区设置生效查看php.ini文件时,可以发现如下默认配置项。[Date]; Defines the default timezone used by the date functions; http://php.net/date.timezone;date.timezone = UTC这里可以看到默认的时区设置,以及这个时区设置被用于date函数。因此这里的设置优先级高,可以影响到php中时间类函数获取的值。#使用php --ini命令可快速获取php配置文件的位置 #查找配置信息中含有timezone字段的配置文件 root@f7f574667670:/app# find / -maxdepth 8 -name '*.conf' -o -name '*.ini' | xargs grep timezone /opt/bitnami/php/etc/php.ini:; Defines the default timezone used by the date functions /opt/bitnami/php/etc/php.ini:; https://php.net/date.timezone /opt/bitnami/php/etc/php.ini:date.timezone = UTC /opt/bitnami/php/lib/php.ini:; Defines the default timezone used by the date functions /opt/bitnami/php/lib/php.ini:; https://php.net/date.timezone /opt/bitnami/php/lib/php.ini:date.timezone = UTC这里发现在php.ini中有一条生效的配置信息:date.timezone = UTC修改这个配置文件,把UTC修改成我们需要的时区。这里需要注意的是,如果直接把UTC改为CST,php会报错。#直接修改为CST sed -i /^date\.timezone/s/UTC/CST/ /opt/bitnami/php/lib/php.ini #让php重新加载配置 kill -USR2 $(pgrep php-fpm) #查看时区信息 php -r 'echo date_default_timezone_get();' PHP Warning: PHP Startup: Invalid date.timezone value 'CST', using 'UTC' instead in Unknown on line 0重新修改配置文件,把CST改为"Asia/Shanghai"sed -i '/^date\.timezone/s/CST/\"Asia\/Shanghai\"/' /opt/bitnami/php/lib/php.ini 或 sed -i /^date\.timezone/s%CST%\"Asia/Shanghai\"% /opt/bitnami/php/lib/php.ini #重新加载配置文件 root@f7f574667670:/app# kill -USR2 $(pgrep php-fpm) root@f7f574667670:/app# php -r 'echo date_default_timezone_get();' Asia/Shanghairoot@f7f574667670:/app# root@f7f574667670:/app# php -r "echo date('Y-m-d H:i:s');" 2025-03-06 10:44:58root@f7f574667670:/app#把php.ini文件拷贝出来,在compose文件中写入映射关系,重启php容器即可。{dotted startColor="#ff6c6c" endColor="#1989fa"/}关于php.ini-production和php.ini-development:这是php给的两个初始配置的模版,区别如下:开发环境:追求调试便利性,牺牲部分安全性。生产环境:追求安全与性能,牺牲调试信息。始终根据实际需求调整配置,两个模板文件只是起点。配置项php.ini-developmentphp.ini-production目标场景本地开发、调试环境线上生产环境错误报告显示所有错误(方便调试)隐藏错误(避免信息泄露)性能优化默认配置,无激进优化启用 opcache 等性能优化日志记录可选开启详细日志强制记录错误到日志文件安全限制较为宽松严格限制(如文件上传、执行权限)主要区别项目参数名称developmentproduction说明zend.exception_ignore_argsOffOn开启后,异常堆栈跟踪中不再显示参数的具体值,仅保留参数的类型和数量zend.exception_string_param_max_len150控制异常堆栈信息中 字符串类型参数的最大显示长度error_reportingE_ALLE_ALL & ~E_DEPRECATED前面报告所有错误,后面忽略部分警告display_errorsOnOff是否直接在页面上显示错误display_startup_errorsOnOff是否显示PHP启动过程中发生的错误mysqlnd.collect_memory_statisticsOnOff启用或禁用统计 MySQL 操作相关的内存使用数据zend.assertions1-1启用或禁用断言注:1 断言生效,检查条件并触发错误(如条件不满足)。0 生成断言代码,但不执行检查(类似注释,无性能损耗)。-1 不生成断言代码(完全忽略 assert(),性能最优,生产环境推荐)。断言(Assertion) 是开发阶段用于验证代码逻辑的调试工具
2025年03月06日
76 阅读
0 评论
0 点赞
1
...
10
11
12
...
18