环境准备
- 一台或多台已经安装好kubenetes的机器。
创建两个文件夹,做后续使用
mkdir -p /usr/share/nginx/html
mkdir -p /etc/nginx
编写deployment
本次部署使用机器的本机网络,同时将本机的路径映射到container里
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 1
nodeSelector:
nginx-server: "true"
selector:
matchLabels:
app: nginx
strategy:
type: RollingUpdate
template:
metadata:
labels:
app: nginx
spec:
volumes:
- name: etc
hostPath:
path: /etc/nginx/
- name: data
hostPath:
path: /usr/share/nginx/html
containers:
- image: nginx
imagePullPolicy: Always
name: nginx
volumeMounts:
- mountPath: /etc/nginx/
name: etc
- mountPath: /usr/share/nginx/html
name: data
ports:
- containerPort: 80
hostNetwork: true
imagePullSecrets:
- name: default-secret
给节点打label
我这边只有一个机器,所以只需要给这个节点打上label即可
[root@kubernetes ~]# kubectl get node
NAME STATUS AGE
127.0.0.1 Ready 333d
kubectl label node 127.0.0.1 nginx-server=true
kubectl create -f nginx-deployment.yaml --validate=false
此时可以看到已经有pod调度到本节点上了。
但是pod状态会变成Error或CrashLoopBackOff。
[root@kubernetes ~]# kubectl get pod nginx-730213637-pjp12 -o wide
NAME READY STATUS RESTARTS AGE IP NODE
nginx-730213637-pjp12 0/1 CrashLoopBackOff 0 30m 127.0.0.1 127.0.0.1
通过pod日志可以看到:
2020/04/09 17:22:03 [emerg] 1#1: open() "/etc/nginx/nginx.conf" failed (2: No such file or directory)
nginx: [emerg] open() "/etc/nginx/nginx.conf" failed (2: No such file or directory)
有如下解决方案:
使用nginx的安装包
[root@kubernetes ~]# wget http://nginx.org/download/nginx-1.17.9.tar.gz
[root@kubernetes ~]# tar -zxvf nginx-1.17.9.tar.gz
然后将nginx安装包里的配置文件和index.html,copy到对应文件夹
如果不copy html文件夹里的文件,在访问80端口时,会有HTTP 403限制
[root@kubernetes ~]# cp ./nginx-1.17.9/conf/* /etc/nginx/
[root@kubernetes ~]# cp ./nginx-1.17.9/html/* /usr/share/nginx/html/
接着删掉原来pod,使得pod重启,即可。
[root@kubernetes ~]# kubectl delete pod nginx-730213637-tbjqs
[root@kubernetes ~]# kubectl get pod nginx-730213637-pjp12 -o wide
NAME READY STATUS RESTARTS AGE IP NODE
nginx-730213637-pjp12 1/1 Running 0 30m 127.0.0.1 127.0.0.1
即可在外部浏览器中访问。
注意:本例子使用的是主机网络和本地文件路径,完善一点可以使用service和NFS/PV系统