制作镜像,将项目上传到阿里云仓库上
deployment部署镜像创建出pod
kubectl create deployment [deployment名字]–image=[镜像地址] --dry-run -o yaml >[yaml文件名].yaml
[root@zjj101 k8s]# kubectl create deployment javademo1 --image=registry.cn-beijing.aliyuncs.com/zjjmkmkksjm/zjj101:1.0 --dry-run -o yaml >javademo1.yaml
W0228 16:41:04.046934 11821 helpers.go:535] --dry-run is deprecated and can be replaced with --dry-run=client.
[root@zjj101 k8s]#
–dry-run -o yaml >javademo1.yaml 的意思是在当前目录下导出一个yaml 文件,为了方便使用
查看创建的文件
[root@zjj101 k8s]# cat javademo1.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: javademo1
name: javademo1
spec:
replicas: 1
selector:
matchLabels:
app: javademo1
strategy: {
}
template:
metadata:
creationTimestamp: null
labels:
app: javademo1
spec:
containers:
- image: registry.cn-beijing.aliyuncs.com/zjjmkmkksjm/zjj101:1.0
name: zjj101
resources: {
}
status: {
}
[root@zjj101 k8s]#
执行yaml文件
kubectl apply -f [yaml文件名].yaml
[root@zjj101 k8s]# kubectl apply -f javademo1.yaml
deployment.apps/javademo1 created
查看pod
kubectl get pods
发现已经有了. 需要耐心等待,一般需要等十几分钟 status才能变成running
[root@zjj101 k8s]# kubectl get pod
NAME READY STATUS RESTARTS AGE
javademo1-69f7678847-qf5gf 1/1 Running 0 6m59s
你可以用 kubectl describe pod [pod名字] 看一下是否报错
[root@zjj101 k8s]# kubectl describe pod javademo1-69f7678847-qf5gf
Name: javademo1-69f7678847-qf5gf
Namespace: default
Priority: 0
Node: zjj103/172.16.10.103
Start Time: Sun, 28 Feb 2021 17:22:23 +0800
Labels: app=javademo1
pod-template-hash=69f7678847
Annotations: <none>
Status: Pending
IP:
IPs: <none>
Controlled By: ReplicaSet/javademo1-69f7678847
Containers:
zjj101:
Container ID:
Image: registry.cn-beijing.aliyuncs.com/zjjmkmkksjm/zjj101: 1.0
Image ID:
Port: <none>
Host Port: <none>
State: Waiting
Reason: ContainerCreating
Ready: False
Restart Count: 0
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-z plfm (ro)
Conditions:
Type Status
Initialized True
Ready False
ContainersReady False
PodScheduled True
Volumes:
default-token-zplfm:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-zplfm
Optional: false
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s
node.kubernetes.io/unreachable:NoExecute for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 5m20s default-scheduler Successfully assigned def ault/javademo1-69f7678847-qf5gf to zjj103
Normal Pulling 5m19s kubelet, zjj103 Pulling image "registry.c n-beijing.aliyuncs.com/zjjmkmkksjm/zjj101:1.0"
接着查看,发现已经好了 .
[root@zjj101 k8s]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
javademo1-69f7678847-qf5gf 1/1 Running 0 9m52s 10.244.3.141 zjj103 <none> <none>
上面的ip 10.244.3.141 是 kubernetes 集群内部使用的,外网浏览器是访问不到的, 就需要对外暴露端口.
添加三个副本做一个扩容
kubectl scale deployment [deployment名字] --replicas=3
[root@zjj101 k8s]# kubectl scale deployment javademo1 --replicas=3
deployment.apps/javademo1 scaled
k8s会在node节点扩容
发现已经扩容了.
[root@zjj101 k8s]# kubectl get deployment javademo1
NAME READY UP-TO-DATE AVAILABLE AGE
javademo1 3/3 3 3 14m
[root@zjj101 k8s]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
javademo1-69f7678847-68z2w 1/1 Running 0 3m12s 10.244.3.143 zjj103 <none> <none>
javademo1-69f7678847-nsnbc 1/1 Running 0 3m12s 10.244.3.142 zjj103 <none> <none>
javademo1-69f7678847-qf5gf 1/1 Running 0 17m 10.244.3.141 zjj103 <none> <none>
Service 对外暴露应用
Service 对外暴露端口的时候其实也做了一个负载均衡的效果
kubectl expose deployment [deployment 名字]–port=[对外提供端口] --target-port=[内部本身端口] --type=NodePort
说明:
– port 是对外提供的端口
–target-port 是内部本身的端口,
–type=NodePort方式暴露
注意端口不要乱写,要和你项目端口对上才行,不然就访问不了.比如说你原来项目端口就是8080,那么这个就得写8080端口,不然的话,就会访问不到
[root@zjj101 k8s]# kubectl expose deployment javademo1 --port=8080 --target-port=8080 --type=NodePort
service/javademo1 exposed
查看对外暴露的端口
kubectl get svc
[root@zjj101 k8s]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
javademo1 NodePort 10.105.149.218 <none> 8080:31420/TCP 5s
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 46h
[root@zjj101 k8s]#
访问就能访问到了
查看到javademo1对外是31420端口,那么你就可以用集群中任何机器的31420端口都能访问到
访问过程中会给你平均分摊到这个pod的多个副本里面
查看docker日志
kubectl get pod -o wide javademo1
[root@zjj101 k8s]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
javademo1-69f7678847-68z2w 1/1 Running 0 23m 10.244.3.143 zjj103 <none> <none>
javademo1-69f7678847-nsnbc 1/1 Running 0 23m 10.244.3.142 zjj103 <none> <none>
javademo1-69f7678847-qf5gf 1/1 Running 0 37m 10.244.3.141 zjj103 <none> <none>
发现节点都在zjj103机器上
在zjj103机器上用docker ps -a ,发现这个机器上部署了三台docker机器
[root@zjj103 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ea2786f7e715 3e63062a76cc "java -Djava.securit…" 16 minutes ago Up 15 minutes k8s_zjj101_javademo1-69f7678847-68z2w_default_eec5b2d6-93d0-4cbd-9002-269c989b4010_0
e191795d4c3b 3e63062a76cc "java -Djava.securit…" 16 minutes ago Up 15 minutes k8s_zjj101_javademo1-69f7678847-nsnbc_default_a3370b98-6db4-4693-9350-832e2490175b_0
7cd16dd0c99a registry.cn-beijing.aliyuncs.com/zjjmkmkksjm/zjj101 "java -Djava.securit…" 23 minutes ago Up 23 minutes k8s_zjj101_javademo1-69f7678847-qf5gf_default_4fb122ba-ae81-4153-8f5e-a22012e58a30_0
用 docker logs ea2786f7e715 和 docker logs 7cd16dd0c99a 和 docker logs e191795d4c3b 就能查看到tomcat的运行日志