CloudNative 架构

CloudNative|云原生应用架构|云原生架构|容器化架构|微服务架构|平台架构|基础架构


  • 首页

  • 标签

  • 分类

  • 归档

  • k8s离线安装包

  • 搜索

Kubeadm证书过期时间调整

发表于 2018-12-11 | 分类于 kubernetes , kubeadm | | 热度: ℃
字数统计: 2,181 字 | 阅读时长 ≈ 12 分钟

kubeadm 默认证书为一年,一年过期后,会导致api service不可用,使用过程中会出现:x509: certificate has expired or is not yet valid

如何进行调整,下面给了两个方案,供大家选择

方案一 通过修改kubeadm 调整证书过期时间

阅读全文 »

Kubeadm 证书说明

发表于 2018-12-11 | 分类于 kubernetes , kubeadm | | 热度: ℃
字数统计: 2,182 字 | 阅读时长 ≈ 9 分钟

如果你使用过kubeadm部署过Kubernetes的环境, master主机节点上就一定会在相应的目录创建了一大批证书文件, 本篇文章就来说说kubeadm到底为我们生成了哪些证书

在Kubernetes的部署中, 创建证书, 配置证书是一道绕不过去坎儿, 好在有kubeadm这样的自动化工具, 帮我们去生成, 配置这些证书. 对于只是想体验Kubernetes或只是想测试的亲来说, 这已经够了, 但是作为Kubernetes的集群维护者来说, kubeadm更像是一个黑盒, 本篇文章就来说说黑盒中关于证书的事儿~

使用kubeadm创建完Kubernetes集群后, 默认会在/etc/kubernetes/pki目录下存放集群中需要用到的证书文件, 整体结构如下图所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
root@k8s-master:/etc/kubernetes/pki# tree
.
|-- apiserver.crt
|-- apiserver-etcd-client.crt
|-- apiserver-etcd-client.key
|-- apiserver.key
|-- apiserver-kubelet-client.crt
|-- apiserver-kubelet-client.key
|-- ca.crt
|-- ca.key
|-- etcd
| |-- ca.crt
| |-- ca.key
| |-- healthcheck-client.crt
| |-- healthcheck-client.key
| |-- peer.crt
| |-- peer.key
| |-- server.crt
| `-- server.key
|-- front-proxy-ca.crt
|-- front-proxy-ca.key
|-- front-proxy-client.crt
|-- front-proxy-client.key
|-- sa.key
`-- sa.pub

1 directory, 22 files

以上22个文件就是kubeadm为我们创建的所有证书相关的文件, 下面我们来一一解析

证书分组

Kubernetes把证书放在了两个文件夹中

  • /etc/kubernetes/pki
  • /etc/kubernetes/pki/etcd

我们再将这22个文件按照更细的粒度去分组

阅读全文 »

Kubernetes Pod 的生命周期管理

发表于 2018-11-30 | 分类于 kubernetes | | 热度: ℃
字数统计: 1,430 字 | 阅读时长 ≈ 6 分钟

Pod的生命周期


Pod phase

Pod 的 status 在信息保存在 PodStatus 中定义,其中有一个 phase 字段。

Pod 的相位(phase)是 Pod 在其生命周期中的简单宏观概述。该阶段并不是对容器或 Pod 的综合汇总,也不是为了做为综合状态机。

Pod 相位的数量和含义是严格指定的。除了本文档中列举的状态外,不应该再假定 Pod 有其他的 phase 值。

无论你是手动创建 Pod,还是通过 deployment、daemonset 或 statefulset来创建,Pod 的 phase 都有以下几个可能的值:

  • 挂起(Pending):Pod 已被 Kubernetes 系统接受,但有一个或者多个容器镜像尚未创建。等待时间包括调度 Pod 的时间和通过网络下载镜像的时间,这可能需要花点时间。
  • 运行中(Running):该 Pod 已经绑定到了一个节点上,Pod 中所有的容器都已被创建。至少有一个容器正在运行,或者正处于启动或重启状态。
  • 成功(Successed):Pod 中的所有容器都被成功终止,并且不会再重启。
  • 失败(Failed):Pod 中的所有容器都已终止了,并且至少有一个容器是因为失败终止。也就是说,容器以非0状态退出或者被系统终止。
  • 未知(Unkonwn):因为某些原因无法取得 Pod 的状态,通常是因为与 Pod 所在主机通信失败。

下图是 Pod 的生命周期示意图,从图中可以看到 Pod 状态的变化。
K8s pod 生命周期

阅读全文 »

Java和Docker限制的那些事儿

发表于 2018-07-18 | 分类于 docker | | 热度: ℃
字数统计: 3,090 字 | 阅读时长 ≈ 13 分钟

揭秘

Java和Docker不是天然的朋友。 Docker可以设置内存和CPU限制,而Java不能自动检测到。使用Java的Xmx标识(繁琐/重复)或新的实验性JVM标识,我们可以解决这个问题。

虚拟化中的不匹配

Java和Docker的结合并不是完美匹配的,最初的时候离完美匹配有相当大的距离。对于初学者来说,JVM的全部设想就是,虚拟机可以让程序与底层硬件无关。

那么,把我们的Java应用打包到JVM中,然后整个再塞进Docker容器中,能给我们带来什么好处呢?大多数情况下,你只是在复制JVMs和Linux容器,除了浪费更多的内存,没任何好处。感觉这样子挺傻的。

不过,Docker可以把你的程序,设置,特定的JDK,Linux设置和应用服务器,还有其他工具打包在一起,当做一个东西。站在DevOps/Cloud的角度来看,这样一个完整的容器有着更高层次的封装。

问题一:内存

时至今日,绝大多数产品级应用仍然在使用Java 8(或者更旧的版本),而这可能会带来问题。Java 8(update 131之前的版本)跟Docker无法很好地一起工作。问题是在你的机器上,JVM的可用内存和CPU数量并不是Docker允许你使用的可用内存和CPU数量。

比如,如果你限制了你的Docker容器只能使用100MB内存,但是呢,旧版本的Java并不能识别这个限制。Java看不到这个限制。JVM会要求更多内存,而且远超这个限制。如果使用太多内存,Docker将采取行动并杀死容器内的进程!JAVA进程被干掉了,很明显,这并不是我们想要的。

为了解决这个问题,你需要给Java指定一个最大内存限制。在旧版本的Java(8u131之前),你需要在容器中通过设置-Xmx来限制堆大小。这感觉不太对,你可不想定义这些限制两次,也不太想在你的容器中来定义。

幸运的是我们现在有了更好的方式来解决这个问题。从Java 9之后(8u131+),JVM增加了如下标志:

1
-XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap

这些标志强制JVM检查Linux的cgroup配置,Docker是通过cgroup来实现最大内存设置的。现在,如果你的应用到达了Docker设置的限制(比如500MB),JVM是可以看到这个限制的。JVM将会尝试GC操作。如果仍然超过内存限制,JVM就会做它该做的事情,抛出OutOfMemoryException。也就是说,JVM能够看到Docker的这些设置。

从Java 10之后(参考下面的测试),这些体验标志位是默认开启的,也可以使用-XX:+UseContainerSupport来使能(你可以通过设置-XX:-UseContainerSupport来禁止这些行为)。

问题二:CPU

第二个问题是类似的,但它与CPU有关。简而言之,JVM将查看硬件并检测CPU的数量。它会优化你的runtime以使用这些CPUs。但是同样的情况,这里还有另一个不匹配,Docker可能不允许你使用所有这些CPUs。可惜的是,这在Java 8或Java 9中并没有修复,但是在Java 10中得到了解决。

从Java 10开始,可用的CPUs的计算将采用以不同的方式(默认情况下)解决此问题(同样是通过UseContainerSupport)。

阅读全文 »

Centos 6.x 上升级go 1.10.3

发表于 2018-07-18 | 分类于 golang | | 热度: ℃
字数统计: 661 字 | 阅读时长 ≈ 3 分钟

前提

目前本地Linux (Centos 6.x) 编译环境还滞留在1.8.x上,为了提升go性能,想将go升级到最新版,但在升级过程中遇到如下问题,故此记录下!忘后续的go友能跳过此坑!

问题描述

在Centos 6.x 升级go 1.10.x过程中遇到如下问题:

  • step1. 下载go 1.10.x 源码
  • step2. 解压,进入go/src
  • step3. 执行./all.bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Building Go cmd/dist using /root/go1.4.
Building Go toolchain1 using /root/go1.4.
Building Go bootstrap cmd/go (go_bootstrap) using Go toolchain1.
Building Go toolchain2 using go_bootstrap and Go toolchain1.
Building Go toolchain3 using go_bootstrap and Go toolchain2.
Building packages and commands for linux/amd64.

##### Testing packages.
.... 过程略长,特此省略
ok cmd/internal/src 0.001s
ok cmd/internal/test2json 0.097s
ok cmd/link 1.988s
ok cmd/link/internal/ld 43.529s
ok cmd/nm 3.417s
ok cmd/objdump 1.588s
ok cmd/pack 1.217s
ok cmd/trace 0.007s
--- FAIL: TestObjFile (0.01s)
binutils_test.go:231: SourceLine: unexpected error write |1: broken pipe
FAIL
FAIL cmd/vendor/github.com/google/pprof/internal/binutils 0.018s
ok cmd/vendor/github.com/google/pprof/internal/driver 12.194s
ok cmd/vendor/github.com/google/pprof/internal/elfexec 0.002s
ok cmd/vendor/github.com/google/pprof/internal/graph 0.002s
ok cmd/vendor/github.com/google/pprof/internal/measurement 0.002s
ok cmd/vendor/github.com/google/pprof/internal/report 0.048s
ok cmd/vendor/github.com/google/pprof/internal/symbolizer 0.004s
ok cmd/vendor/github.com/google/pprof/internal/symbolz 0.004s
ok cmd/vendor/github.com/google/pprof/profile 0.045s
ok cmd/vendor/github.com/ianlancetaylor/demangle 0.012s
ok cmd/vendor/golang.org/x/arch/arm/armasm 0.007s
ok cmd/vendor/golang.org/x/arch/arm64/arm64asm 0.043s
ok cmd/vendor/golang.org/x/arch/ppc64/ppc64asm 0.003s
ok cmd/vendor/golang.org/x/arch/x86/x86asm 0.064s
ok cmd/vet 1.205s
ok cmd/vet/internal/cfg 0.002s
2018/07/18 17:59:22 Failed: exit status 1
阅读全文 »
1…171819…22
icyboy

icyboy

109 日志
98 分类
182 标签
RSS
GitHub 微博 知乎
友情链接
  • 张家港水蜜桃
  • 运维开发
  • DevOps
© 2016 — 2021 icyboy | Site words total count: 330.8k
本站访客数:
博客全站共330.8k字