删除 kubernetes-MD/利用kubernetes部署网站项目.md
This commit is contained in:
parent
bfa0c5fcf8
commit
898213891b
|
@ -1,335 +0,0 @@
|
|||
<h1><center>利用kubernetes部署网站项目</center></h1>
|
||||
|
||||
著作:行癫 <盗版必究>
|
||||
|
||||
------
|
||||
|
||||
## 一:环境准备
|
||||
|
||||
#### 1.kubernetes集群
|
||||
|
||||
集群正常运行,例如使用以下命令检查
|
||||
|
||||
```shell
|
||||
[root@master ~]# kubectl get node
|
||||
NAME STATUS ROLES AGE VERSION
|
||||
master Ready control-plane,master 5d19h v1.23.1
|
||||
node-1 Ready <none> 5d19h v1.23.1
|
||||
node-2 Ready <none> 5d19h v1.23.1
|
||||
node-3 Ready <none> 5d19h v1.23.1
|
||||
```
|
||||
|
||||
#### 2.harbor私有仓库
|
||||
|
||||
主要给kubernetes集群提供镜像服务
|
||||
|
||||
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220502184026483.png" alt="image-20220502184026483" style="zoom:50%;" />
|
||||
## 二:项目部署
|
||||
|
||||
#### 1.镜像构建
|
||||
|
||||
软件下载地址:
|
||||
|
||||
```shell
|
||||
wget https://nginx.org/download/nginx-1.20.2.tar.gz
|
||||
```
|
||||
|
||||
项目包下载地址:
|
||||
|
||||
```shell
|
||||
git clone https://github.com/blackmed/xingdian-project.git
|
||||
```
|
||||
|
||||
构建centos基础镜像Dockerfile文件:
|
||||
|
||||
```shell
|
||||
root@nfs-harbor ~]# cat Dockerfile
|
||||
FROM daocloud.io/centos:7
|
||||
MAINTAINER "xingdianvip@gmail.com"
|
||||
ENV container docker
|
||||
RUN yum -y swap -- remove fakesystemd -- install systemd systemd-libs
|
||||
RUN yum -y update; yum clean all; \
|
||||
(cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == systemd-tmpfiles-setup.service ] || rm -f $i; done); \
|
||||
rm -f /lib/systemd/system/multi-user.target.wants/*;\
|
||||
rm -f /etc/systemd/system/*.wants/*;\
|
||||
rm -f /lib/systemd/system/local-fs.target.wants/*; \
|
||||
rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
|
||||
rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \
|
||||
rm -f /lib/systemd/system/basic.target.wants/*;\
|
||||
rm -f /lib/systemd/system/anaconda.target.wants/*;
|
||||
VOLUME [ "/sys/fs/cgroup" ]
|
||||
CMD ["/usr/sbin/init"]
|
||||
root@nfs-harbor ~]# docker bulid -t xingdian .
|
||||
```
|
||||
|
||||
构建项目镜像:
|
||||
|
||||
```shell
|
||||
[root@nfs-harbor nginx]# cat Dockerfile
|
||||
FROM xingdian
|
||||
ADD nginx-1.20.2.tar.gz /usr/local
|
||||
RUN rm -rf /etc/yum.repos.d/*
|
||||
COPY CentOS-Base.repo /etc/yum.repos.d/
|
||||
COPY epel.repo /etc/yum.repos.d/
|
||||
RUN yum clean all && yum makecache fast
|
||||
RUN yum -y install gcc gcc-c++ openssl openssl-devel pcre-devel zlib-devel make
|
||||
WORKDIR /usr/local/nginx-1.20.2
|
||||
RUN ./configure --prefix=/usr/local/nginx
|
||||
RUN make && make install
|
||||
WORKDIR /usr/local/nginx
|
||||
ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/nginx/sbin
|
||||
EXPOSE 80
|
||||
RUN rm -rf /usr/local/nginx/conf/nginx.conf
|
||||
COPY nginx.conf /usr/local/nginx/conf/
|
||||
RUN mkdir /dist
|
||||
CMD ["nginx", "-g", "daemon off;"]
|
||||
[root@nfs-harbor nginx]# docker build -t nginx:v2 .
|
||||
```
|
||||
|
||||
注意:
|
||||
|
||||
需要事先准备好Centos的Base仓库和epel仓库
|
||||
|
||||
#### 2.上传项目到harbor
|
||||
|
||||
修改镜像tag:
|
||||
|
||||
```shell
|
||||
[root@nfs-harbor ~]# docker tag nginx:v2 10.0.0.230/xingdian/nginx:v2
|
||||
```
|
||||
|
||||
登录私有仓库:
|
||||
|
||||
```shell
|
||||
[root@nfs-harbor ~]# docker login 10.0.0.230
|
||||
Username: xingdian
|
||||
Password:
|
||||
```
|
||||
|
||||
上传镜像:
|
||||
|
||||
```shell
|
||||
[root@nfs-harbor ~]# docker push 10.0.0.230/xingdian/nginx:v2
|
||||
```
|
||||
|
||||
注意:
|
||||
|
||||
默认上传时采用https,因为我们部署的harbor使用的是http,所以再上传之前按照3-1进行修改
|
||||
|
||||
#### 3.kubernetes集群连接harbor
|
||||
|
||||
修改所有kubernetes集群能够访问http仓库,默认访问的是https
|
||||
|
||||
```shell
|
||||
[root@master ~]# vim /etc/systemd/system/multi-user.target.wants/docker.service
|
||||
ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry 10.0.1.13 --containerd=/run/containerd/containerd.sock
|
||||
[root@master ~]# systemctl daemon-reload
|
||||
[root@master ~]# systemctl restart docker
|
||||
```
|
||||
|
||||
kubernetes集群创建secret用于连接harbor
|
||||
|
||||
```shell
|
||||
[root@master ~]# kubectl create secret docker-registry regcred --docker-server=10.0.0.230 --docker-username=diange --docker-password=QianFeng@123
|
||||
[root@master ~]# kubectl get secret
|
||||
NAME TYPE DATA AGE
|
||||
regcred kubernetes.io/dockerconfigjson 1 19h
|
||||
```
|
||||
|
||||
注意:
|
||||
|
||||
regcred:secret的名字
|
||||
|
||||
--docker-server:指定服务器的地址
|
||||
|
||||
--docker-username:指定harbor的用户
|
||||
|
||||
--docker-password:指定harbor的密码
|
||||
|
||||
#### 4.部署NFS
|
||||
|
||||
部署NFS目的是为了给kubernetes集群提供持久化存储,kubernetes集群也要安装nfs-utils目的是为了支持nfs文件系统
|
||||
|
||||
```shell
|
||||
[root@nfs-harbor ~]# yum -y install nfs-utils
|
||||
[root@nfs-harbor ~]# systemctl start nfs
|
||||
[root@nfs-harbor ~]# systemctl enable nfs
|
||||
```
|
||||
|
||||
创建共享目录并对外共享
|
||||
|
||||
```shell
|
||||
[root@nfs-harbor ~]# mkdir /kubernetes-1
|
||||
[root@nfs-harbor ~]# cat /etc/exports
|
||||
/kubernetes-1 *(rw,no_root_squash,sync)
|
||||
[root@nfs-harbor ~]# exportfs -rv
|
||||
```
|
||||
|
||||
项目放入共享目录下
|
||||
|
||||
```shell
|
||||
[root@nfs-harbor ~]# git clone https://github.com/blackmed/xingdian-project.git
|
||||
[root@nfs-harbor ~]# unzip dist.zip
|
||||
[root@nfs-harbor ~]# cp -r dist/* /kubernetes-1
|
||||
```
|
||||
|
||||
#### 5.创建statefulset部署项目
|
||||
|
||||
该yaml文件中除了statefulset以外还有service、PersistentVolume、StorageClass
|
||||
|
||||
```shell
|
||||
[root@master xingdian]# cat Statefulset.yaml
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: nginx
|
||||
labels:
|
||||
app: nginx
|
||||
spec:
|
||||
type: NodePort
|
||||
ports:
|
||||
- port: 80
|
||||
name: web
|
||||
targetPort: 80
|
||||
nodePort: 30010
|
||||
selector:
|
||||
app: nginx
|
||||
---
|
||||
apiVersion: storage.k8s.io/v1
|
||||
kind: StorageClass
|
||||
metadata:
|
||||
name: xingdian
|
||||
provisioner: example.com/external-nfs
|
||||
parameters:
|
||||
server: 10.0.0.230
|
||||
path: /kubernetes-1
|
||||
readOnly: "false"
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
name: xingdian-1
|
||||
spec:
|
||||
capacity:
|
||||
storage: 1Gi
|
||||
volumeMode: Filesystem
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
storageClassName: xingdian
|
||||
nfs:
|
||||
path: /kubernetes-1
|
||||
server: 10.0.0.230
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
name: xingdian-2
|
||||
spec:
|
||||
capacity:
|
||||
storage: 1Gi
|
||||
volumeMode: Filesystem
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
storageClassName: xingdian
|
||||
nfs:
|
||||
path: /kubernetes-1
|
||||
server: 10.0.0.230
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: StatefulSet
|
||||
metadata:
|
||||
name: web
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
app: nginx
|
||||
serviceName: "nginx"
|
||||
replicas: 2
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: nginx
|
||||
spec:
|
||||
terminationGracePeriodSeconds: 10
|
||||
containers:
|
||||
- name: nginx
|
||||
image: 10.0.0.230/xingdian/nginx:v2
|
||||
ports:
|
||||
- containerPort: 80
|
||||
name: web
|
||||
volumeMounts:
|
||||
- name: www
|
||||
mountPath: /dist
|
||||
volumeClaimTemplates:
|
||||
- metadata:
|
||||
name: www
|
||||
spec:
|
||||
accessModes: [ "ReadWriteOnce" ]
|
||||
storageClassName: "xingdian"
|
||||
resources:
|
||||
requests:
|
||||
storage: 1Gi
|
||||
```
|
||||
|
||||
#### 6.运行
|
||||
|
||||
```shell
|
||||
[root@master xingdian]# kubectl create -f Statefulset.yaml
|
||||
service/nginx created
|
||||
storageclass.storage.k8s.io/xingdian created
|
||||
persistentvolume/xingdian-1 created
|
||||
persistentvolume/xingdian-2 created
|
||||
statefulset.apps/web created
|
||||
```
|
||||
|
||||
## 三:项目验证
|
||||
|
||||
#### 1.pv验证
|
||||
|
||||
```shell
|
||||
[root@master xingdian]# kubectl get pv
|
||||
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
|
||||
xingdian-1 1Gi RWO Retain Bound default/www-web-1 xingdian 9m59s
|
||||
xingdian-2 1Gi RWO Retain Bound default/www-web-0 xingdian 9m59s
|
||||
```
|
||||
|
||||
#### 2.pvc验证
|
||||
|
||||
```shell
|
||||
[root@master xingdian]# kubectl get pvc
|
||||
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
|
||||
www-web-0 Bound xingdian-2 1Gi RWO xingdian 10m
|
||||
www-web-1 Bound xingdian-1 1Gi RWO xingdian 10m
|
||||
```
|
||||
|
||||
#### 3.storageClass验证
|
||||
|
||||
```shell
|
||||
[root@master xingdian]# kubectl get storageclass
|
||||
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
|
||||
xingdian example.com/external-nfs Delete Immediate false 10m
|
||||
```
|
||||
|
||||
#### 4.statefulset验证
|
||||
|
||||
```shell
|
||||
[root@master xingdian]# kubectl get statefulset
|
||||
NAME READY AGE
|
||||
web 2/2 13m
|
||||
[root@master xingdian]# kubectl get pod
|
||||
NAME READY STATUS RESTARTS AGE
|
||||
web-0 1/1 Running 0 13m
|
||||
web-1 1/1 Running 0 13m
|
||||
```
|
||||
|
||||
#### 5.service验证
|
||||
|
||||
```shell
|
||||
[root@master xingdian]# kubectl get svc
|
||||
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
|
||||
nginx NodePort 10.111.189.32 <none> 80:30010/TCP 13m
|
||||
```
|
||||
|
||||
#### 6.浏览器访问
|
||||
|
||||
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220502193031689.png" alt="image-20220502193031689" style="zoom:80%;" />
|
Loading…
Reference in New Issue