记一次Kubenetes部署Nginx的全过程

环境准备

  • 一台或多台已经安装好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系统

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值