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
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
2
3
4
5
6
7
8
9
10
- 删除:
[root@master01 ~]# kubectl delete pods nginx-deploy
pod "nginx-deploy" deleted
1
2
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
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
2
3
4
5
6
7
8
9
10
11
12
13
Service.spec.type: NodePort
通过每个Node上的IP和静态端口(NodePort)暴露服务。NodePort 服务会路由到 ClusterIP服务,这个 ClusterIP 服务会自动创建。通过请求
# 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
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
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
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
2
3
4
5
6
7
- node节点
mount -t nfs stor01:/data/volumes /mnt
mount
umount /mnt/
1
2
3
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
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
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
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
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
2
3
4
5
6
上次更新: 2024/08/08, 06:59:58