alpine系统运维记录

包管理

apk add --no-cache
http://dl-cdn.alpinelinux.org/alpine/v3.8/main/x86_64/
echo "http://mirrors.aliyun.com/alpine/v3.4/main/" > /etc/apk/repositories
#阿里云的镜像库
https://mirrors.aliyun.com/alpine/v3.6/main/
https://mirrors.aliyun.com/alpine/v3.6/community/

我负责的业务环境是centos7.4+docker+alphie,最近业务遇到一个很难缠的问题,解析一些域名的时候总是5秒才开始返回结果。经过一段时间的资料和技术排查我怀疑以下点

  • 默认先ipv6解析,超时之后才使用ipv4解析
  • 因为使用了dnsmasq,有的dns解析服务比如119.29.29.29就可以解析域名,但是其他的可能解析不了,所以有的DNS服务对udp包的处理上可能有差别
  • dnsmasq可能使用了一个新的自由域名解析,如果其中的一个域名真的timeout,那也偶尔会超时5秒
  • 可能有的域名有ipv6的地址,有的域名没有配置
  • ping nslookup dig curl等等可以解析域名的应用程序,对域名的解析方式可能都不一样

转载于:https://my.oschina.net/xueyi28/blog/2996041

### Docker 和 Kubernetes (k8s) 运维最佳实践与指南 Docker 和 Kubernetes 是现代云原生应用开发和部署的核心工具。Docker 提供了容器化技术,使得应用可以在一致的环境中运行,而 Kubernetes 则是一个强大的容器编排平台,能够自动化部署、扩展和管理容器化应用。以下是 Docker 和 Kubernetes 运维的一些最佳实践与指南。 #### 1. **Docker 运维最佳实践** ##### **1.1 使用轻量级基础镜像** 选择轻量级的基础镜像可以减少镜像的大小,从而加快镜像的构建和传输速度。例如,使用 `alpine` 镜像作为基础镜像,因为它体积小且功能齐全。 ```Dockerfile FROM alpine:latest ``` ##### **1.2 多阶段构建** 多阶段构建可以帮助减少最终镜像的大小。通过在多个阶段中构建应用,只保留必要的文件和依赖项,可以显著减少镜像的体积。 ```Dockerfile # 第一阶段:构建应用 FROM golang:1.16 AS builder WORKDIR /app COPY . . RUN CGO_ENABLED=0 go build -o myapp # 第二阶段:创建最终镜像 FROM alpine:latest WORKDIR /root/ COPY --from=builder /app/myapp . CMD ["./myapp"] ``` ##### **1.3 使用 `.dockerignore` 文件** `.dockerignore` 文件可以防止不必要的文件被包含在镜像中,从而减少镜像的大小并提高构建效率。 ```plaintext .git *.log *.tmp ``` ##### **1.4 安全性** 确保 Docker 容器的安全性是运维的重要部分。以下是一些常见的安全实践: - **使用非 root 用户运行容器**:避免以 root 用户身份运行容器,以降低潜在的安全风险。 ```Dockerfile RUN adduser --disabled-password --gecos '' myuser USER myuser ``` - **限制资源使用**:通过设置 CPU 和内存限制,防止容器占用过多资源。 ```bash docker run --cpus="1" --memory="512m" myimage ``` - **定期更新镜像**:确保基础镜像和依赖项始终保持最新状态,以修复已知的安全漏洞。 ##### **1.5 日志和监控** 启用日志记录和监控可以帮助运维人员更好地了解容器的行为和性能。Docker 提供了内置的日志驱动程序,可以将日志发送到外部系统。 ```bash docker run --log-driver=json-file --log-opt max-size=10m --log-opt max-file=3 myimage ``` #### 2. **Kubernetes (k8s) 运维最佳实践** ##### **2.1 使用 Helm 进行应用部署** Helm 是 Kubernetes 的包管理工具,可以帮助简化复杂应用的部署。通过 Helm Chart,可以轻松地定义、安装和升级 Kubernetes 应用。 ```bash helm repo add stable https://charts.helm.sh/stable helm install my-release stable/nginx-ingress ``` ##### **2.2 自动化 CI/CD 流水线** 通过集成 CI/CD 工具(如 Jenkins、GitLab CI、GitHub Actions 等),可以实现 Kubernetes 应用的自动化构建、测试和部署。这不仅可以提高部署效率,还可以减少人为错误。 ```yaml # 示例:GitHub Actions 工作流 name: Deploy to Kubernetes on: push: branches: - main jobs: deploy: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v2 - name: Build Docker image run: | docker build -t myimage:latest . docker tag myimage:latest myregistry/myimage:latest - name: Push Docker image run: | docker login myregistry -u ${{ secrets.REGISTRY_USER }} -p ${{ secrets.REGISTRY_PASSWORD }} docker push myregistry/myimage:latest - name: Deploy to Kubernetes uses: azure/k8s-deploy@v1 with: namespace: production manifests: | manifests/deployment.yaml manifests/service.yaml ``` ##### **2.3 使用 RBAC 进行权限管理** Kubernetes 提供了基于角色的访问控制(RBAC),可以确保不同用户和团队只能访问他们所需的资源。合理配置 RBAC 可以提高集群的安全性。 ```yaml # 示例:定义一个 Role apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: namespace: default name: pod-reader rules: - apiGroups: [""] resources: ["pods"] verbs: ["get", "watch", "list"] ``` ##### **2.4 自动扩缩容** Kubernetes 支持自动扩缩容功能,可以根据负载动态调整 Pod 的数量。通过 Horizontal Pod Autoscaler(HPA),可以根据 CPU 使用率或其他自定义指标自动扩展 Pod。 ```bash kubectl autoscale deployment my-deployment --cpu-percent=50 --min=1 --max=10 ``` ##### **2.5 监控与日志** 使用 Prometheus 和 Grafana 等工具可以实现对 Kubernetes 集群的监控。Prometheus 可以收集指标数据,而 Grafana 则可以提供可视化仪表板。 ```yaml # 示例:Prometheus 配置文件 scrape_configs: - job_name: 'kubernetes-nodes' kubernetes_sd_configs: - role: node ``` ##### **2.6 使用 Operator 管理复杂应用** Operator 是一种 Kubernetes 原生的应用管理方式,特别适合管理复杂的应用。Operator 可以自动化处理应用的安装、升级和维护任务。 ```bash kubectl apply -f https://operatorhub.io/install/etcd-operator.yaml ``` ##### **2.7 定期备份与恢复** 定期备份 Kubernetes 集群的配置和数据是非常重要的。可以使用 Velero 等工具进行集群的备份和恢复。 ```bash velero backup create my-backup --include-namespaces=my-namespace velero backup describe my-backup ``` ##### **2.8 使用 Ingress 控制器进行流量管理** Ingress 控制器可以用于管理外部访问 Kubernetes 服务的流量。常见的 Ingress 控制器包括 Nginx Ingress、Traefik 等。 ```yaml # 示例:Nginx Ingress 配置 apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: my-ingress annotations: nginx.ingress.kubernetes.io/rewrite-target: / spec: rules: - http: paths: - path: /app pathType: Prefix backend: service: name: my-service port: number: 80 ``` ##### **2.9 使用 ConfigMap 和 Secret 管理配置** ConfigMap 和 Secret 是 Kubernetes 中用于管理配置和敏感信息的资源。ConfigMap 用于存储非敏感的配置数据,而 Secret 用于存储敏感信息(如密码、密钥等)。 ```yaml # 示例:ConfigMap apiVersion: v1 kind: ConfigMap metadata: name: app-config data: APP_PORT: "8080" LOG_LEVEL: "info" ``` ```yaml # 示例:Secret apiVersion: v1 kind: Secret metadata: name: app-secret type: Opaque data: DB_PASSWORD: base64_encoded_password ``` ##### **2.10 使用 Pod Security Admission(PSA)增强安全性** Kubernetes 1.25 引入了 Pod Security Admission(PSA),这是一种内置的机制,用于强制实施 Pod 的安全策略。通过 PSA,可以限制 Pod 的特权、禁止特权提升等。 ```yaml # 示例:启用 PSA apiVersion: v1 kind: Namespace metadata: name: my-namespace labels: pod-security.kubernetes.io/enforce: baseline ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值