This commit is contained in:
Shao Huan Qing
2021-06-26 22:13:53 +08:00
parent 80242f2a41
commit e0e3077de4
3 changed files with 274 additions and 87 deletions

View File

@ -0,0 +1,223 @@
---
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
name: psp.flannel.unprivileged
annotations:
seccomp.security.alpha.kubernetes.io/allowedProfileNames: docker/default
seccomp.security.alpha.kubernetes.io/defaultProfileName: docker/default
apparmor.security.beta.kubernetes.io/allowedProfileNames: runtime/default
apparmor.security.beta.kubernetes.io/defaultProfileName: runtime/default
spec:
privileged: false
volumes:
- configMap
- secret
- emptyDir
- hostPath
allowedHostPaths:
- pathPrefix: "/etc/cni/net.d"
- pathPrefix: "/etc/kube-flannel"
- pathPrefix: "/run/flannel"
readOnlyRootFilesystem: false
# Users and groups
runAsUser:
rule: RunAsAny
supplementalGroups:
rule: RunAsAny
fsGroup:
rule: RunAsAny
# Privilege Escalation
allowPrivilegeEscalation: false
defaultAllowPrivilegeEscalation: false
# Capabilities
allowedCapabilities: ['NET_ADMIN', 'NET_RAW']
defaultAddCapabilities: []
requiredDropCapabilities: []
# Host namespaces
hostPID: false
hostIPC: false
hostNetwork: true
hostPorts:
- min: 0
max: 65535
# SELinux
seLinux:
# SELinux is unused in CaaSP
rule: 'RunAsAny'
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: flannel
rules:
- apiGroups: ['extensions']
resources: ['podsecuritypolicies']
verbs: ['use']
resourceNames: ['psp.flannel.unprivileged']
- apiGroups:
- ""
resources:
- pods
verbs:
- get
- apiGroups:
- ""
resources:
- nodes
verbs:
- list
- watch
- apiGroups:
- ""
resources:
- nodes/status
verbs:
- patch
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: flannel
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: flannel
subjects:
- kind: ServiceAccount
name: flannel
namespace: kube-system
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: flannel
namespace: kube-system
---
kind: ConfigMap
apiVersion: v1
metadata:
name: kube-flannel-cfg
namespace: kube-system
labels:
tier: node
app: flannel
data:
cni-conf.json: |
{
"name": "cbr0",
"cniVersion": "0.3.1",
"plugins": [
{
"type": "flannel",
"delegate": {
"hairpinMode": true,
"isDefaultGateway": true
}
},
{
"type": "portmap",
"capabilities": {
"portMappings": true
}
}
]
}
net-conf.json: |
{
"Network": "10.244.0.0/16",
"Backend": {
"Type": "vxlan"
}
}
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: kube-flannel-ds
namespace: kube-system
labels:
tier: node
app: flannel
spec:
selector:
matchLabels:
app: flannel
template:
metadata:
labels:
tier: node
app: flannel
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/os
operator: In
values:
- linux
hostNetwork: true
priorityClassName: system-node-critical
tolerations:
- operator: Exists
effect: NoSchedule
serviceAccountName: flannel
initContainers:
- name: install-cni
image: quay.io/coreos/flannel:v0.14.0
command:
- cp
args:
- -f
- /etc/kube-flannel/cni-conf.json
- /etc/cni/net.d/10-flannel.conflist
volumeMounts:
- name: cni
mountPath: /etc/cni/net.d
- name: flannel-cfg
mountPath: /etc/kube-flannel/
containers:
- name: kube-flannel
image: quay.io/coreos/flannel:v0.14.0
command:
- /opt/bin/flanneld
args:
- --ip-masq
- --kube-subnet-mgr
resources:
requests:
cpu: "100m"
memory: "50Mi"
limits:
cpu: "100m"
memory: "50Mi"
securityContext:
privileged: true
capabilities:
add: ["NET_ADMIN", "NET_RAW"]
env:
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
volumeMounts:
- name: run
mountPath: /run/flannel
- name: flannel-cfg
mountPath: /etc/kube-flannel/
volumes:
- name: run
hostPath:
path: /run/flannel
- name: cni
hostPath:
path: /etc/cni/net.d
- name: flannel-cfg
configMap:
name: kube-flannel-cfg

View File

@ -50,13 +50,3 @@ kubeadm init --config=kubeadm-config.yaml --upload-certs
rm -rf /root/.kube/
mkdir /root/.kube/
cp -i /etc/kubernetes/admin.conf /root/.kube/config
# 安装 calico 网络插件
# 参考文档 https://docs.projectcalico.org/v3.13/getting-started/kubernetes/self-managed-onprem/onpremises
echo ""
echo "安装calico-3.17.1"
rm -f calico-3.17.1.yaml
kubectl create -f https://kuboard.cn/install-script/v1.21.x/calico-operator.yaml
wget https://kuboard.cn/install-script/v1.21.x/calico-custom-resources.yaml
sed -i "s#192.168.0.0/16#${POD_SUBNET}#" calico-custom-resources.yaml
kubectl create -f calico-custom-resources.yaml

View File

@ -15,7 +15,7 @@ meta:
## 文档特点
<div style="min-height: 612px;">
<InstallBanner version="v1.21.x" updateCount="96"/>
<InstallBanner version="v1.21.x" updateCount="98"/>
</div>
参考此免费文档98%以上的概率,您能够顺利完成 K8S 安装极个别的问题可以到QQ群里免费答疑。
@ -185,7 +185,7 @@ default via 172.21.0.1 dev eth0
<b-tabs content-class="mt-3">
<b-tab title="快速安装" active>
**请将脚本最后的 1.21.0 替换成您需要的版本号(必须是 1.21 的小版本,不能是 1.19.1 等),**
**请将脚本最后的 1.21.2 替换成您需要的版本号(必须是 1.21 的小版本,不能是 1.19.1 等),**
<font color="red">脚本中间的 v1.21.x 不要替换</font>
> docker hub 镜像请根据自己网络的情况任选一个
@ -195,7 +195,7 @@ default via 172.21.0.1 dev eth0
> * 第十行为阿里云 docker hub 镜像
``` sh
# 在 master 节点和 worker 节点都要执行
# 最后一个参数 1.21.0 用于指定 kubenetes 版本,支持所有 1.21.x 版本的安装
# 最后一个参数 1.21.2 用于指定 kubenetes 版本,支持所有 1.21.x 版本的安装
# 腾讯云 docker hub 镜像
# export REGISTRY_MIRROR="https://mirror.ccs.tencentyun.com"
# DaoCloud 镜像
@ -204,13 +204,13 @@ default via 172.21.0.1 dev eth0
# export REGISTRY_MIRROR="https://05f073ad3c0010ea0f4bc00b7105ec20.mirror.swr.myhuaweicloud.com"
# 阿里云 docker hub 镜像
export REGISTRY_MIRROR=https://registry.cn-hangzhou.aliyuncs.com
curl -sSL https://kuboard.cn/install-script/v1.21.x/install_kubelet.sh | sh -s 1.21.0
curl -sSL https://kuboard.cn/install-script/v1.21.x/install_kubelet.sh | sh -s 1.21.2
```
</b-tab>
<b-tab title="手动安装">
手动执行以下代码,结果与快速安装相同。<font color="red">***请将脚本第79行已高亮的 ${1} 替换成您需要的版本号,例如 1.21.0***</font>
手动执行以下代码,结果与快速安装相同。<font color="red">***请将脚本第79行已高亮的 ${1} 替换成您需要的版本号,例如 1.21.2***</font>
> docker hub 镜像请根据自己网络的情况任选一个
> * 第四行为腾讯云 docker hub 镜像
@ -218,7 +218,7 @@ curl -sSL https://kuboard.cn/install-script/v1.21.x/install_kubelet.sh | sh -s 1
> * 第八行为阿里云 docker hub 镜像
``` sh
# 在 master 节点和 worker 节点都要执行
# 最后一个参数 1.21.0 用于指定 kubenetes 版本,支持所有 1.21.x 版本的安装
# 最后一个参数 1.21.2 用于指定 kubenetes 版本,支持所有 1.21.x 版本的安装
# 腾讯云 docker hub 镜像
# export REGISTRY_MIRROR="https://mirror.ccs.tencentyun.com"
# DaoCloud 镜像
@ -250,7 +250,7 @@ export REGISTRY_MIRROR=https://registry.cn-hangzhou.aliyuncs.com
::: danger 关于初始化时用到的环境变量
* **APISERVER_NAME** 不能是 master 的 hostname
* **APISERVER_NAME** 必须全为小写字母、数字、小数点,不能包含减号
* **POD_SUBNET** 所使用的网段不能与 ***master节点/worker节点*** 所在的网段重叠。该字段的取值为一个 <a href="/glossary/cidr.html" target="_blank">CIDR</a> 值,如果您对 CIDR 这个概念还不熟悉,请仍然执行 export POD_SUBNET=10.100.0.1/16 命令,不做修改
* **POD_SUBNET** 所使用的网段不能与 ***master节点/worker节点*** 所在的网段重叠。该字段的取值为一个 <a href="/glossary/cidr.html" target="_blank">CIDR</a> 值,如果您对 CIDR 这个概念还不熟悉,请仍然执行 export POD_SUBNET=10.100.0.0/16 命令,不做修改
:::
<b-card>
@ -258,7 +258,7 @@ export REGISTRY_MIRROR=https://registry.cn-hangzhou.aliyuncs.com
<b-tab title="快速初始化" active>
**请将脚本最后的 1.21.0 替换成您需要的版本号(必须是 1.21 的小版本,不能是 1.19.1 等),**
**请将脚本最后的 1.21.2 替换成您需要的版本号(必须是 1.21 的小版本,不能是 1.19.1 等),**
<font color="red">脚本中间的 v1.21.x 不要替换</font>
``` sh {10}
@ -269,15 +269,15 @@ export MASTER_IP=x.x.x.x
# 替换 apiserver.demo 为 您想要的 dnsName
export APISERVER_NAME=apiserver.demo
# Kubernetes 容器组所在的网段,该网段安装完成后,由 kubernetes 创建,事先并不存在于您的物理网络中
export POD_SUBNET=10.100.0.1/16
export POD_SUBNET=10.100.0.0/16
echo "${MASTER_IP} ${APISERVER_NAME}" >> /etc/hosts
curl -sSL https://kuboard.cn/install-script/v1.21.x/init_master.sh | sh -s 1.21.0
curl -sSL https://kuboard.cn/install-script/v1.21.x/init_master.sh | sh -s 1.21.2
```
</b-tab>
<b-tab title="手动初始化">
手动执行以下代码,结果与快速初始化相同。<font color="red">***请将脚本第21行已高亮的 ${1} 替换成您需要的版本号,例如 1.21.0***</font>
手动执行以下代码,结果与快速初始化相同。<font color="red">***请将脚本第21行已高亮的 ${1} 替换成您需要的版本号,例如 1.21.2***</font>
``` sh
# 只在 master 节点执行
@ -287,7 +287,7 @@ export MASTER_IP=x.x.x.x
# 替换 apiserver.demo 为 您想要的 dnsName
export APISERVER_NAME=apiserver.demo
# Kubernetes 容器组所在的网段,该网段安装完成后,由 kubernetes 创建,事先并不存在于您的物理网络中
export POD_SUBNET=10.100.0.1/16
export POD_SUBNET=10.100.0.0/16
echo "${MASTER_IP} ${APISERVER_NAME}" >> /etc/hosts
```
@ -311,7 +311,7 @@ To see the stack trace of this error execute with --v=5 or higher
请执行如下命令:
> 在原命令的最后增加参数 `/coredns`
``` sh
curl -sSL https://kuboard.cn/install-script/v1.21.x/init_master.sh | sh -s 1.21.0 /coredns
curl -sSL https://kuboard.cn/install-script/v1.21.x/init_master.sh | sh -s 1.21.2 /coredns
```
</b-card>
@ -330,7 +330,7 @@ curl -sSL https://kuboard.cn/install-script/v1.21.x/init_master.sh | sh -s 1.21.
* 环境变量 ***MASTER_IP*** 的值应该为 master 节点的 **内网IP**,如果不是,请重新 export
* **APISERVER_NAME** 不能是 master 的 hostname
* **APISERVER_NAME** 必须全为小写字母、数字、小数点,不能包含减号
* **POD_SUBNET** 所使用的网段不能与 ***master节点/worker节点*** 所在的网段重叠。该字段的取值为一个 <a href="/glossary/cidr.html" target="_blank">CIDR</a> 值,如果您对 CIDR 这个概念还不熟悉,请仍然执行 export POD_SUBNET=10.100.0.1/16 命令,不做修改
* **POD_SUBNET** 所使用的网段不能与 ***master节点/worker节点*** 所在的网段重叠。该字段的取值为一个 <a href="/glossary/cidr.html" target="_blank">CIDR</a> 值,如果您对 CIDR 这个概念还不熟悉,请仍然执行 export POD_SUBNET=10.100.0.0/16 命令,不做修改
* 重新初始化 master 节点前,请先执行 `kubeadm reset -f` 操作
</b-card>
@ -375,8 +375,45 @@ kubectl get nodes -o wide
<!-- </div>
<div slot="step4"> -->
## 安装网络插件
网络插件可以选择 calico 或者 flannel任意选择其一即可
<b-card>
<b-tabs content-class="mt-3">
<b-tab title="Calico" active>
::: danger 阿里云
如果您在阿里云上安装 K8S建议使用 flannel有多个案例表明 calico 与阿里云存在兼容性问题。
:::
``` sh
export POD_SUBNET=10.100.0.0/16
kubectl apply -f https://kuboard.cn/install-script/v1.21.x/calico-operator.yaml
wget https://kuboard.cn/install-script/v1.21.x/calico-custom-resources.yaml
sed -i "s#192.168.0.0/16#${POD_SUBNET}#" calico-custom-resources.yaml
kubectl apply -f calico-custom-resources.yaml
```
</b-tab>
<b-tab title="Flannel">
``` sh
export POD_SUBNET=10.100.0.0/16
kubectl apply -f https://kuboard.cn/install-script/v1.21.x/calico-operator.yaml
wget https://kuboard.cn/install-script/flannel/flannel-v0.14.0.yaml
sed -i "s#10.244.0.0/16#${POD_SUBNET}#" flannel-v0.14.0.yaml
kubectl apply -f https://kuboard.cn/install-script/flannel/flannel-v0.14.0.yaml
```
</b-tab>
</b-tabs>
</b-card>
## 初始化 worker节点
### 获得 join命令参数
@ -512,69 +549,6 @@ demo-worker-a-2 Ready <none> 3m56s v1.21.x
```
<!-- </div>
<div slot="step5"> -->
## 安装 Ingress Controller
<b-card>
<b-tabs content-class="mt-3">
<b-tab title="快速初始化" active>
**在 master 节点上执行**
部分情况下,下面的这条指令,您需要执行两次才能成功。
``` sh
# 只在 master 节点执行
kubectl apply -f https://kuboard.cn/install-script/v1.21.x/nginx-ingress.yaml
```
</b-tab>
<b-tab title="卸载IngressController">
**在 master 节点上执行**
只在您想选择其他 Ingress Controller 的情况下卸载
``` sh
# 只在 master 节点执行
kubectl delete -f https://kuboard.cn/install-script/v1.21.x/nginx-ingress.yaml
```
</b-tab>
<b-tab title="YAML文件">
<<< @/.vuepress/public/install-script/v1.21.x/nginx-ingress.yaml
</b-tab>
</b-tabs>
</b-card>
**配置域名解析**
将域名 *.demo.yourdomain.com 解析到 demo-worker-a-2 的 IP 地址 z.z.z.z (也可以是 demo-worker-a-1 的地址 y.y.y.y
**验证配置**
在浏览器访问 a.demo.yourdomain.com将得到 404 NotFound 错误页面
::: tip 提示
许多初学者在安装 Ingress Controller 时会碰到问题,请不要灰心,可暂时跳过 ***安装 Ingress Controller*** 这个部分,等您学完 www.kuboard.cn 上 [Kubernetes 入门](/learning/k8s-basics/kubernetes-basics.html) 以及 [通过互联网访问您的应用程序](/learning/k8s-intermediate/service/ingress.html) 这两部分内容后,再来回顾 Ingress Controller 的安装。
也可以参考 [Install Nginx Ingress](https://docs.nginx.com/nginx-ingress-controller/installation/installation-with-manifests/)
:::
::: warning
如果您打算将 Kubernetes 用于生产环境,请参考此文档 [Installing Ingress Controller](https://docs.nginx.com/nginx-ingress-controller/installation/installation-with-manifests/),完善 Ingress 的配置
:::
<!-- </div>
<div slot="step6"> -->