Skip to content
This repository was archived by the owner on Jul 3, 2023. It is now read-only.

Commit a71aa18

Browse files
author
Li Jian
committed
准备k8s文档;增加elasticsearch容器部署说明
1 parent 350efcd commit a71aa18

11 files changed

+389
-1
lines changed

README.md

+5
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,8 @@
33
- [Redhat RHEL / CentOS](./centos)
44
- [Docker](./docker)
55
- [Docker Compose](./docker-compose)
6+
- [Kubernetes](./k8s)
7+
8+
## 容器运行常见服务
9+
10+
- [Elasticsearch](./services/elasticsearch.md)

centos/initial.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ yum install -y epel-release
1717
## 安装常见工具
1818

1919
```
20-
yum install -y tmux vim dstat lsof htop
20+
yum install -y tmux vim dstat lsof htop tree jq rsync
2121
```
2222

2323
- [Docker](../docker)

k8s/README.md

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# kubernetes
2+
3+
## 安装 k8s
4+
5+
- [安装 k8s (From Scratch)](./install-from-scratch.md)
6+
- [k8s 组件介绍](./k8s-components.md)

k8s/attachments/deploy-arch.epgz

16.5 KB
Binary file not shown.

k8s/attachments/k8s-deploy-arch.png

24.7 KB
Loading

k8s/case-CluterDNS.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# ClusterDNS
2+
3+
默认不熟 k8s ,创建一个 pod 并 describe 查看该 pod 详情时,我们可能会遇到下面信息:
4+
5+
kubelet does not have ClusterDNS IP configured and cannot create Pod using "ClusterFirst" policy. Falling back to DNSDefault policy.

k8s/centos7-ooclab-example.md

+49
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
# CentOS 7 环境部署实践
2+
3+
## 环境
4+
5+
阿里云环境, CentOS 7, kubernetes 1.7.2
6+
7+
## 架构
8+
9+
- Master: inet 10.31.166.39 netmask 255.255.252.0
10+
- Node1:
11+
12+
## Master
13+
14+
### etcd
15+
16+
修改 `/etc/etcd/etcd.conf`:
17+
18+
```
19+
ETCD_LISTEN_CLIENT_URLS="http://10.31.166.39:2379"
20+
```
21+
22+
### flannel
23+
24+
创建 `flannel-config.json` 文件:
25+
26+
```json
27+
{
28+
"Network": "10.20.0.0/16",
29+
"SubnetLen": 24,
30+
"Backend": {
31+
"Type": "vxlan",
32+
"VNI": 1
33+
}
34+
}
35+
```
36+
37+
写入 etcd :
38+
39+
```
40+
# etcdctl --no-sync --endpoints "http://10.31.166.39:2379" set /atomic.io/network/config < flannel-config.json
41+
{
42+
"Network": "10.20.0.0/16",
43+
"SubnetLen": 24,
44+
"Backend": {
45+
"Type": "vxlan",
46+
"VNI": 1
47+
}
48+
}
49+
```

k8s/install-from-scratch.md

+191
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,191 @@
1+
# 安装 k8s (手动)
2+
3+
4+
## 参考
5+
6+
- [Creating a Custom Cluster from Scratch](https://kubernetes.io/docs/getting-started-guides/scratch/)
7+
8+
9+
## 准备
10+
11+
- 2-4 台 host(物理机或虚拟机)
12+
- 操作系统使用最新的 CentOS / Ubuntu x86_64
13+
- Kubernetes releases 1.7.2
14+
15+
### 部署架构图
16+
17+
![安装架构](./attachments/k8s-deploy-arch.png)
18+
19+
说明:
20+
21+
- `Master` 为一台 host ,部署集群需要的服务
22+
- `Node 1` , `Node 2`, `Node 3` 为 work 节点
23+
- etcd
24+
- flanneld 为 overlay 网络
25+
26+
| 节点 | IP |
27+
|------|----|
28+
| k8s-master | 192.168.122.58 |
29+
| k8s-node-1 | 192.168.122.59 |
30+
| k8s-node-2 | 192.168.122.60 |
31+
| k8s-node-3 | 192.168.122.61 |
32+
33+
## 步骤
34+
35+
### Master
36+
37+
38+
#### etcd
39+
40+
安装 etcd :
41+
42+
yum install -y etcd
43+
44+
编辑 `/etc/etcd/etcd.conf` , 修改 :
45+
46+
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
47+
48+
重启 etcd :
49+
50+
systemctl restart etcd
51+
52+
53+
#### kube-apiserver
54+
55+
```
56+
kube-apiserver \
57+
--insecure-bind-address=0.0.0.0 \
58+
--insecure-port=8080 \
59+
--etcd-servers=http://192.168.122.58:2379 \
60+
--service-cluster-ip-range=10.254.0.0/16
61+
```
62+
63+
#### kube-scheduler
64+
65+
```
66+
kube-scheduler --master=http://192.168.122.58:8080
67+
```
68+
69+
#### kube-controller-manager
70+
71+
```
72+
kube-controller-manager --master=http://192.168.122.58:8080
73+
```
74+
75+
76+
### Node
77+
78+
以 k8s-node-1 为例
79+
80+
#### kubelet
81+
82+
##### 旧的启动方式
83+
84+
```
85+
kubelet \
86+
--api-servers=http://192.168.122.58:8080 \
87+
--pod-infra-container-image=ibmcom/pause:3.0
88+
```
89+
90+
##### 新启动方式
91+
92+
创建 `kubeconfig` 配置文件:
93+
94+
```
95+
kubectl config set-cluster kubernetes \
96+
--server=http://192.168.122.58:8080 \
97+
--kubeconfig=kubeconfig
98+
# 设置上下文参数
99+
kubectl config set-context default \
100+
--cluster=kubernetes \
101+
--user=kubelet \
102+
--kubeconfig=kubeconfig
103+
# 设置默认上下文
104+
kubectl config use-context default --kubeconfig=kubeconfig
105+
```
106+
107+
生成的 `kubeconfig` 配置文件如下:
108+
109+
```yaml
110+
apiVersion: v1
111+
clusters:
112+
- cluster:
113+
server: http://192.168.122.58:8080
114+
name: kubernetes
115+
contexts:
116+
- context:
117+
cluster: kubernetes
118+
user: kubelet
119+
name: default
120+
current-context: default
121+
kind: Config
122+
preferences: {}
123+
users: []
124+
```
125+
126+
启动 kubelet :
127+
128+
```
129+
kubelet --require-kubeconfig --kubeconfig=kubeconfig \
130+
--pod-infra-container-image=ibmcom/pause:3.0
131+
```
132+
133+
**注意** 默认路径 `/var/lib/kubelet/kubeconfig`
134+
135+
136+
#### kube-proxy
137+
138+
##### 旧的启动方式
139+
140+
```
141+
kube-proxy --master=http://192.168.122.58:8080
142+
```
143+
144+
#### 新的启动方式
145+
146+
```
147+
kube-proxy --kubeconfig=kubeconfig
148+
```
149+
150+
#### 问题
151+
152+
##### pause 映像替换
153+
154+
https://hub.docker.com/r/ibmcom/pause/
155+
156+
```
157+
--pod-infra-container-image=ibmcom/pause:3.0
158+
```
159+
160+
161+
## 模块说明
162+
163+
### Flannel
164+
165+
```
166+
kubectl apply -f kube-flannel.yml
167+
```
168+
169+
查看:
170+
171+
```
172+
kubectl get ds --all-namespaces -o wide
173+
```
174+
175+
查看详细描述:
176+
177+
```
178+
kubectl describe ds kube-flannel-ds --namespace kube-system
179+
```
180+
181+
#### 错误
182+
183+
```
184+
The DaemonSet "kube-flannel-ds" is invalid: spec.template.spec.containers[0].securityContext.privileged: Forbidden: disallowed by cluster policy
185+
```
186+
187+
`--allow-privileged` 启动 kubelet, kube-apiserver
188+
189+
## 参考
190+
191+
- [Battlefield: Calico, Flannel, Weave and Docker Overlay Network](http://chunqi.li/2015/11/15/Battlefield-Calico-Flannel-Weave-and-Docker-Overlay-Network/)

k8s/k8s-components.md

+73
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
# k8s 组件
2+
3+
[Kubernetes Components](https://kubernetes.io/docs/concepts/overview/components/)
4+
5+
介绍部署 k8s 所需的二进制组件
6+
7+
8+
## Master 节点组件
9+
10+
Master 组件提供集群控制,通常集中运行在一台 VM 里即可。
11+
12+
[Building High-Availability Clusters](https://kubernetes.io/docs/admin/high-availability)
13+
14+
### kube-apiserver
15+
16+
kube-apiserver 提供 k8s API
17+
18+
### etcd
19+
20+
所有 k8s 集群自身的数据都存储在这里,请务必做好数据备份!
21+
22+
### kube-controller-manager
23+
24+
运行 controllers
25+
26+
### cloud-controller-manager
27+
28+
1.6 引入,运行底层云平台相关的 controllers
29+
30+
### kube-scheduler
31+
32+
为 Pod 选择 Node
33+
34+
### addons
35+
36+
附加组件以 pod 或 service 的形式,提供k8s集群更多特性。
37+
38+
#### DNS
39+
40+
k8s 集群通常都需要这个 addon
41+
42+
#### User Interface
43+
44+
kube-ui 提供一个只读集群状态信息
45+
46+
#### Container Resource Monitoring
47+
48+
提供一个基本的时序数据监控
49+
50+
#### Cluster-level Logging
51+
52+
53+
## Node 节点组件
54+
55+
Node 组件运行在每一个节点上
56+
57+
### kubelet
58+
59+
kubelet 是主节点组件
60+
61+
### kube-proxy
62+
63+
通过在节点上执行网络规则,使 k8s 的 service 抽象得以实现
64+
65+
### docker
66+
67+
### rkt
68+
69+
### supervisord
70+
71+
### fluentd
72+
73+
集群日志中需要的 agent

k8s/kubectl.md

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# kubectl 管理 kubernetes 集群
2+
3+
## Tips
4+
5+
### 重启 POD
6+
7+
如果有源配置文件:
8+
9+
```
10+
kubectl replace --force -f <resource-file>
11+
```
12+
13+
如果没有源配置文件:
14+
15+
```
16+
kubectl get pod PODNAME -n NAMESPACE -o yaml | kubectl replace --force -f -
17+
```

0 commit comments

Comments
 (0)