一个简单的小开发
首页
分类
标签
归档
关于

YDS

30岁大龄程java程序员,心不老,神不灭
首页
分类
标签
归档
关于
  • K8S

    • K8S-集群安装(2.24前后版本的安装方式都有)
    • K8S基础概念学习
      • 命令式创建应用
        • 使用`kubectl run` 创建应用
        • YAML创建应用
        • ingress 和 ingressController
        • 安装nfs
        • NFS使用PV和PVC
    • K8S控制台安装(安装dashboard)
    • storageclass学习
    • configmap学习
    • K8S发布JAVA项目
    • k8s长期token的使用方式
    • 创建一个pvc
  • DOCKER

  • HELM

  • LINUX

  • DEVOPS
  • K8S
yds
2023-11-24
目录

K8S基础概念学习

# K8S基础概念学习

学习k8s时的笔记,相对比较简单的操作笔记。

# 命令式创建应用

# 使用kubectl run 创建应用

  • 语法:
kubectl run <NAME> --image=<image> [--env="key=value"] [--port=port] [--replicas=replicas] [--dry-run=bool] [--overrides=inline-json] [--command] -- [COMMAND] [args...] [options]
1
  • 例:
[root@master01 ~]# kubectl run nginx-deploy --image=nginx:latest --port=80 --replicas=1
pod/nginx-deploy created
[root@master01 ~]# kubectl get pods -o wide
NAME           READY   STATUS    RESTARTS   AGE   IP           NODE    NOMINATED NODE   READINESS GATES
nginx-deploy   1/1     Running   0          44s   10.244.2.5   node2   <none>           <none>
1
2
3
4
5
  • 这是一个pod ip,仅仅可以在集群内部访问,如下:
[root@master01 ~]# curl 10.244.2.5 -I
HTTP/1.1 200 OK
Server: nginx/1.21.0
Date: Thu, 27 May 2021 02:10:29 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 25 May 2021 12:28:56 GMT
Connection: keep-alive
ETag: "60aced88-264"
Accept-Ranges: bytes
1
2
3
4
5
6
7
8
9
10
  • 删除:
[root@master01 ~]# kubectl delete pods nginx-deploy
pod "nginx-deploy" deleted
1
2

# YAML创建应用

  • 以nginx为例,创建deploy
    文件 nginx-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deploy
spec:
  replicas: 1
  selector:
    matchLabels:
        app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

可以使用 kubectl explain Deployment.sepc 查看对应配置 创建svc对外暴露服务,nginx-svc.yaml

apiVersion: v1
kind: Service
metadata:
  name: nginx-svc
  namespace: default
spec:
  selector:
    app: nginx
  type: NodePort
  ports:
  - port: 80
    targetPort: 80
    nodePort: 30080
1
2
3
4
5
6
7
8
9
10
11
12
13

Service.spec.type: NodePort 通过每个Node上的IP和静态端口(NodePort)暴露服务。NodePort 服务会路由到 ClusterIP服务,这个 ClusterIP 服务会自动创建。通过请求 :,可以从集群的外部访问一个NodePort服务。

# ingress 和 ingressController

参考资料
https://github.com/kubernetes/ingress-nginx
https://kubernetes.io/zh/docs/tasks/access-application-cluster/ingress-minikube/
https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.46.0/deploy/static/provider/cloud/deploy.yaml

采用 NodePort 方式暴露服务面临问题是,服务一旦多起来,NodePort 在每个节点上开启的端口会及其庞大,而且难以维护。

  • 搞到deploy.yaml文件
kubectl apply -f deploy.yaml
[root@master01 ingress]# kubectl get pod -n ingress-nginx
NAME                                       READY   STATUS      RESTARTS   AGE
ingress-nginx-admission-create-8t692       0/1     Completed   0          134m
ingress-nginx-admission-patch-fdxhm        0/1     Completed   0          134m
ingress-nginx-controller-898465b97-cb6v5   1/1     Running     0          134m
[root@master01 ingress]# kubectl get svc -n ingress-nginx
NAME                                 TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)                      AGE
ingress-nginx-controller             LoadBalancer   10.1.156.191   <pending>     80:30080/TCP,443:30443/TCP   134m
ingress-nginx-controller-admission   ClusterIP      10.1.144.4     <none>        443/TCP                      134m
1
2
3
4
5
6
7
8
9
10
  • 部署ingress
    ingress-myapp.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: myapp
  namespace: default
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - host: yds.k8s.com
    http:
      paths:
      - path:
        backend:
          serviceName: myapp
          servicePort: 8080
  - host: tomcat.yds.k8s.com
    http:
      paths:
      - path:
        backend:
          serviceName: nginx-svc
          servicePort: 80
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
curl tomcat.yds.k8s.com:30080
curl yds.k8s.com:30080/hi
1
2

# 安装nfs

  • 各个节点
yum install -y nfs-utils
1
  • 主节点
mkdir /data/volumes -pv
vim /etc/exports
systemctl enable rpcbind.service
systemctl enable nfs-server.service
systemctl start rpcbind.service
systemctl start nfs-server.service
showmount -e
1
2
3
4
5
6
7
  • node节点
mount -t nfs stor01:/data/volumes /mnt
mount
umount /mnt/
1
2
3

# NFS使用PV和PVC

[root@master01 volumes]# mkdir v{1,2,3,4,5}
vim /etc/exports
/data/volumes/v1 *(rw,no_root_squash)
/data/volumes/v2 *(rw,no_root_squash)
/data/volumes/v3 *(rw,no_root_squash)
/data/volumes/v4 *(rw,no_root_squash)
/data/volumes/v5 *(rw,no_root_squash)

[root@master01 volumes]# exportfs -arv
exporting *:/data/volumes/v5
exporting *:/data/volumes/v4
exporting *:/data/volumes/v3
exporting *:/data/volumes/v2
exporting *:/data/volumes/v1
[root@master01 volumes]# showmount -e
  1 apiVersion: v1
Export list for master01:
/data/volumes/v5 *
/data/volumes/v4 *
/data/volumes/v3 *
/data/volumes/v2 *
/data/volumes/v1 *
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
  • nginx-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nginx-pv
  labels:
    name: nginx-pv
spec:
  nfs:
    path: /data/volumes/v1
    server: master01
  accessModes: ["ReadWriteMany","ReadWriteOnce"]
  capacity:
    storage: 1Gi
1
2
3
4
5
6
7
8
9
10
11
12
13
  • nginx-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nginx-pvc
  namespace: default
spec:
  accessModes: ["ReadWriteMany","ReadWriteOnce"]
  resources:
    requests:
      storage: 1Gi
1
2
3
4
5
6
7
8
9
10
  • nginx-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: my-nginx
  namespace: default
spec:
  containers:
  - name: my-nginx
    image: nginx:latest
    volumeMounts:
    - name: html
      mountPath: /usr/share/nginx/html
  volumes:
    - name: html
      persistentVolumeClaim:
        claimName: nginx-pvc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  • 测试
[root@master01 volumes]# kubectl get pods -o wide
NAME                     READY   STATUS    RESTARTS   AGE   IP            NODE    NOMINATED NODE   READINESS GATES
my-nginx                 1/1     Running   0          43s   10.244.2.59   node2   <none>           <none>
[root@master01 volumes]# echo "welcome to pv1" > /data/volumes/v1/index.html
[root@master01 volumes]# curl 10.244.2.59
welcome to pv1
1
2
3
4
5
6
#DEVOPS#K8S
上次更新: 2024/09/30, 01:34:11
K8S-集群安装(2.24前后版本的安装方式都有)
K8S控制台安装(安装dashboard)

← K8S-集群安装(2.24前后版本的安装方式都有) K8S控制台安装(安装dashboard)→

最近更新
01
使用docker-compose安装mysql
09-30
02
鸿蒙app开发中的数据驱动ui渲染问题
08-01
03
LINUX连接openvpn
07-02
更多文章>
Theme by Vdoing | Copyright © 2020-2024 YDS
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式