凌文龙
3 years ago
2 changed files with 185 additions and 0 deletions
@ -0,0 +1,184 @@ |
|||
# k8s 使用的一些技巧 |
|||
|
|||
|
|||
|
|||
## 在容器中获取pod 的IP |
|||
|
|||
设置一个环境变量来引用 resource 的状态字段: |
|||
|
|||
```yaml |
|||
kind: StatefulSet |
|||
apiVersion: apps/v1 |
|||
metadata: |
|||
name: redis-app |
|||
namespace: ops |
|||
spec: |
|||
replicas: 1 |
|||
selector: |
|||
matchLabels: |
|||
app: redis |
|||
template: |
|||
metadata: |
|||
labels: |
|||
app: redis |
|||
spec: |
|||
containers: |
|||
- name: redis |
|||
image: 'redis:5.0' |
|||
command: |
|||
- redis-server |
|||
args: |
|||
- /etc/redis/redis.conf |
|||
- '--protected-mode' |
|||
- 'no' |
|||
- '--cluster-announce-ip' |
|||
- $(POD_IP) |
|||
ports: |
|||
- name: redis |
|||
containerPort: 6379 |
|||
protocol: TCP |
|||
env: |
|||
- name: POD_IP |
|||
valueFrom: |
|||
fieldRef: |
|||
apiVersion: v1 |
|||
fieldPath: status.podIP |
|||
|
|||
``` |
|||
|
|||
|
|||
|
|||
## pod 使用外部DNS |
|||
|
|||
修改 `coredns` 的使用的 `ConfigMap` |
|||
|
|||
```yaml |
|||
apiVersion: v1 |
|||
kind: ConfigMap |
|||
metadata: |
|||
name: coredns |
|||
namespace: kube-system |
|||
data: |
|||
Corefile: | |
|||
.:53 { |
|||
errors |
|||
health { |
|||
lameduck 5s |
|||
} |
|||
hosts { |
|||
10.8.30.157 test-master |
|||
10.8.30.152 test-n1 |
|||
10.8.30.156 test-n2 |
|||
10.8.30.155 test-n3 |
|||
10.8.30.161 test-n4 |
|||
10.8.30.141 test-n5 |
|||
10.8.30.35 node35 |
|||
10.8.30.36 node36 |
|||
10.8.30.37 node37 |
|||
10.8.30.38 node38 |
|||
fallthrough |
|||
} |
|||
ready |
|||
kubernetes cluster.local in-addr.arpa ip6.arpa { |
|||
pods insecure |
|||
fallthrough in-addr.arpa ip6.arpa |
|||
ttl 30 |
|||
} |
|||
prometheus :9153 |
|||
# upstreamNameservers |
|||
forward . 114.114.114.114 223.5.5.5 { |
|||
max_concurrent 1000 |
|||
} |
|||
cache 30 |
|||
loop |
|||
reload |
|||
loadbalance |
|||
} |
|||
# stubDomains |
|||
k8s.com:53 { |
|||
errors |
|||
cache 30 |
|||
forward . 192.168.10.10 |
|||
} |
|||
|
|||
``` |
|||
|
|||
## 创建一个Ubuntu测试容器 |
|||
|
|||
|
|||
|
|||
```yaml |
|||
apiVersion: apps/v1 |
|||
kind: Deployment |
|||
metadata: |
|||
name: test |
|||
labels: |
|||
app: test |
|||
spec: |
|||
replicas: 1 |
|||
template: |
|||
metadata: |
|||
labels: |
|||
app: test |
|||
spec: |
|||
containers: |
|||
- image: ubuntu:20.04 |
|||
name: test |
|||
command: ["/bin/bash","-c","while true; do sleep 1000; done"] |
|||
imagePullPolicy: IfNotPresent |
|||
``` |
|||
|
|||
|
|||
|
|||
## 强制删除某 pod |
|||
|
|||
|
|||
|
|||
```shell |
|||
kubectl delete pod <pod> [-n <namespace>] --force --grace-period=0 |
|||
``` |
|||
|
|||
|
|||
|
|||
## 使容器内时间与宿主机同步 |
|||
|
|||
我们下载的很多容器内的时区都是格林尼治时间,与北京时间差8小时,这将导致容器内的日志和文件创建时间与实际时区不符,有两种方式解决这个问题: |
|||
|
|||
- 修改镜像中的时区配置文件 |
|||
- 将宿主机的时区配置文件`/etc/localtime`使用volume方式挂载到容器中 |
|||
|
|||
第二种方式比较简单,无需重新制作镜像: |
|||
|
|||
```yaml |
|||
apiVersion: apps/v1 # for versions before 1.8.0 use apps/v1beta1 |
|||
kind: Deployment |
|||
metadata: |
|||
name: test |
|||
namespace: test |
|||
labels: |
|||
app: test |
|||
spec: |
|||
selector: |
|||
matchLabels: |
|||
app: test |
|||
replicas: 1 |
|||
template: |
|||
metadata: |
|||
labels: |
|||
app: test |
|||
spec: |
|||
containers: |
|||
- name: test |
|||
image: ubuntu:20.04 |
|||
volumeMounts: |
|||
- name: localtime |
|||
mountPath: /etc/localtime |
|||
volumes: |
|||
- name: localtime |
|||
hostPath: |
|||
path: /etc/localtime |
|||
|
|||
``` |
|||
|
|||
|
|||
|
Loading…
Reference in new issue