步骤+报错总结帖
配置参考:22|实战演练:玩转Kubernetes(2)-Kubernetes入门实战课-极客时间 (geekbang.org)
k8s集群信息:
基本架构:
一,部署 MariaDB(wordpress所需的数据库)
配置文件wp-maria.yml
apiVersion: v1
kind: ConfigMap
metadata:
name: maria-cm
data:
DATABASE: 'db'
USER: 'wp'
PASSWORD: '123'
ROOT_PASSWORD: '123'
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: maria-dep
name: maria-dep
spec:
replicas: 1
selector:
matchLabels:
app: maria-dep
template:
metadata:
labels:
app: maria-dep
spec:
containers:
- image: mariadb:10
name: mariadb
ports:
- containerPort: 3306
envFrom:
- prefix: 'MARIADB_'
configMapRef:
name: maria-cm
---
apiVersion: v1
kind: Service
metadata:
labels:
app: maria-dep
name: maria-svc
spec:
ports:
- port: 3306
protocol: TCP
targetPort: 3306
selector:
app: maria-dep
二,部署wordpress
配置文件wp-dep.yml
apiVersion: v1
kind: ConfigMap
metadata:
name: wp-cm
data:
HOST: 'maria-svc'
USER: 'wp'
PASSWORD: '123'
NAME: 'db'
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: wp-dep
name: wp-dep
spec:
replicas: 2
selector:
matchLabels:
app: wp-dep
template:
metadata:
labels:
app: wp-dep
spec:
containers:
- image: wordpress:5
name: wordpress
ports:
- containerPort: 80
envFrom:
- prefix: 'WORDPRESS_DB_'
configMapRef:
name: wp-cm
---
apiVersion: v1
kind: Service
metadata:
labels:
app: wp-dep
name: wp-svc
spec:
ports:
- name: http80
port: 80
protocol: TCP
targetPort: 80
nodePort: 30088
selector:
app: wp-dep
type: NodePort
运行上述配置文件,查看状态:
确保pod状态running
可以通过浏览器访问k8s集群中任意节点ip+30088端口访问,确认wordpress是否正常配置
三,部署 Nginx Ingress Controller
1,定义 Ingress Class
配置文件ingress-class.yaml
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name: wp-ink
spec:
controller: nginx.org/ingress-controller
2,定义Ingress
配置文件ingress-http.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: wp-ing
spec:
ingressClassName: wp-ink
rules:
- host: wp.test
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: wp-svc
port:
number: 80
3,定义ingress controller
配置文件my-ingress-controller.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: wp-ing
namespace: nginx-ingress
spec:
replicas: 1
selector:
matchLabels:
app: ngx-kic-dep
template:
metadata:
labels:
app: ngx-kic-dep
spec:
hostNetwork: true
serviceAccountName: nginx-ingress
automountServiceAccountToken: true
containers:
- image: nginx/nginx-ingress:2.2-alpine
imagePullPolicy: IfNotPresent
name: nginx-ingress
ports:
- name: http
containerPort: 80
- name: https
containerPort: 443
- name: readiness-port
containerPort: 8081
- name: prometheus
containerPort: 9113
readinessProbe:
httpGet:
path: /nginx-ready
port: readiness-port
periodSeconds: 30
resources:
requests:
cpu: "100m"
memory: "128Mi"
securityContext:
allowPrivilegeEscalation: true
runAsUser: 101 #nginx
runAsNonRoot: true
capabilities:
drop:
- ALL
add:
- NET_BIND_SERVICE
env:
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
args:
- -nginx-configmaps=$(POD_NAMESPACE)/nginx-config
- -default-server-tls-secret=$(POD_NAMESPACE)/default-server-secret
- -ingress-class=wp-ink
4,逐个运行配置文件,此时发现nginx-ingress容器无法启动
此时是因为nginx ingress controller未安装,需要安装
5,安装nginx ingress controller
安装步骤链接:
(1)将其下载到本地
git clone https://github.com/nginxinc/kubernetes-ingress.git --branch v2.0.0
这里末尾的v2.0.0是nginx ingress controller的版本,具体需要参考你自己的k8s版本(版本不适配无法成功运行)
版本对应关系:Releases | NGINX Ingress Controller
查看k8s版本为1.21.0
(2)按步骤执行命令
下载到本地后可以看到目录,进入目录执行安装命令
a,设置基于角色的访问控制 (RBAC)
kubectl apply -f deployments/common/ns-and-sa.yaml
kubectl apply -f deployments/rbac/rbac.yaml
b,创建公共资源
kubectl apply -f deployments/common/nginx-config.yaml
kubectl apply -f deployments/common/ingress-class.yaml
c,创建自定义资源
kubectl apply -f https://raw.githubusercontent.com/nginxinc/kubernetes-ingress/v3.5.1/deploy/crds.yaml
d,部署 NGINX Ingress Controller
kubectl apply -f deployments/deployment/nginx-ingress.yaml
e,使用 DaemonSet
kubectl apply -f deployments/daemon-set/nginx-ingress.yaml
f,确认 NGINX Ingress Controller 正在运行
6,若wp-ing状态为Pending
此时查看pod describe,若为:
则需要在my-ingress-controller.yml配置文件中加上:
tolerations:
- key: node-role.kubernetes.io/master
operator: Exists
effect: NoSchedule
重新运行配置文件后,pod状态为running
7,在本地host文件中加上wp.test的解析规则
注意这里的ip应该是nginx ingress controller pod所在的k8s节点ip,不是k8s-master的ip