11.k8s 入门例子(kubernetes权威指南 第四版)
前提准备
- 准备三台机器,并搭建好K8S集群
| 主机名 | IP | 内存 |
|---|---|---|
| k8s-master | 192.168.43.20 | 2G |
| k8s-node1 | 192.168.43.21 | 2G |
| k8s-node2 | 192.168.43.22 | 2G |
- 准备4个yaml文件,分别是mysql-rc.yaml,mysql-svc.yaml,myweb-rc.yaml,myweb-svc.yaml
- mysql-rc.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: mysql
spec:
replicas: 1
selector:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:5.7
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: "123456"
注意:
image: mysql:5.7我增加了mysql镜像的版本号,因为书是2019年出版,当时最新的镜像就是5+版本的,但是现在我们使用就会报错,当然这只是解决该问题的其中一个方法
我们可以认为template:上面的内容为控制器对象,下面的内容为被控制的对象

- mysql-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
ports:
- port: 3306
selector:
app: mysql
管理对象RC和Service通过selector用label进行关联
- myweb-rc.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: myweb
spec:
replicas: 5
selector:
app: myweb
template:
metadata:
labels:
app: myweb
spec:
containers:
- name: myweb
image: kubeguide/tomcat-app:v1
ports:
- containerPort: 8080
env:
- name: MYSQL_SERVICE_HOST
value: 'mysql'
- name: MYSQL_SERVICE_PORT
value: '3306'
- myweb-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: myweb
spec:
type: NodePort
ports:
- port: 8080
nodePort: 30001
selector:
app: myweb
执行命令
kubectl create -f mysql-rc.yaml
kubectl create -f mysql-svc.yaml
kubectl create -f myweb-rc.yaml
kubectl create -f myweb-svc.yaml
测试页面

每个kubectl create 命令都涉及到master节点选取执行Node,和拉取镜像操作,所以会比较耗时,需要执行完命令等待一段时间
查看命令
- 查看所有的node节点信息
[root@k8s-master chapter1]# kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
k8s-master Ready master 7d6h v1.18.0 192.168.43.20 <none> CentOS Linux 7 (Core) 3.10.0-1160.el7.x86_64 docker://18.6.1
k8s-node1 Ready <none> 7d6h v1.18.0 192.168.43.21 <none> CentOS Linux 7 (Core) 3.10.0-1160.el7.x86_64 docker://18.6.1
k8s-node2 Ready <none> 7d6h v1.18.0 192.168.43.22 <none> CentOS Linux 7 (Core) 3.10.0-1160.el7.x86_64 docker://18.6.1
[root@k8s-master chapter1]#
- 查看所有的pod信息
[root@k8s-master chapter1]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
mysql-sxwpx 1/1 Running 1 24m 10.244.1.12 k8s-node1 <none> <none>
myweb-9xmz9 1/1 Running 0 7m24s 10.244.2.4 k8s-node2 <none> <none>
myweb-pz8wp 1/1 Running 0 7m24s 10.244.1.16 k8s-node1 <none> <none>
myweb-qtrws 1/1 Running 0 7m24s 10.244.2.3 k8s-node2 <none> <none>
myweb-tkzm5 1/1 Running 0 7m24s 10.244.2.5 k8s-node2 <none> <none>
myweb-xrw9v 1/1 Running 0 7m24s 10.244.2.2 k8s-node2 <none> <none>
nginx-f89759699-6v4c6 1/1 Running 3 7d6h 10.244.1.13 k8s-node1 <none> <none>
[root@k8s-master chapter1]#
- 查看所有的服务信息
[root@k8s-master chapter1]# kubectl get svc -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 7d7h <none>
mysql ClusterIP 10.105.204.78 <none> 3306/TCP 15m app=mysql
myweb NodePort 10.110.6.17 <none> 8080:30001/TCP 5m9s app=myweb
nginx NodePort 10.111.0.63 <none> 80:30152/TCP 7d6h app=nginx
[root@k8s-master chapter1]#
- 查看所有的Replication Controllers信息
[root@k8s-master chapter1]# kubectl get rc -o wide
NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR
mysql 1 1 1 28m mysql mysql:5.7 app=mysql
myweb 5 5 5 15m myweb kubeguide/tomcat-app:v1 app=myweb
[root@k8s-master chapter1]#
- 查看所有的deployment信息
[root@k8s-master chapter1]# kubectl get deployment -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
nginx 1/1 1 1 7d6h nginx nginx app=nginx
[root@k8s-master chapter1]#
- 查看所有的endpoints信息
[root@k8s-master chapter1]# kubectl get endpoints
NAME ENDPOINTS AGE
kubernetes 192.168.43.20:6443 7d7h
mysql 10.244.1.12:3306 10m
myweb 10.244.1.16:8080,10.244.2.2:8080,10.244.2.3:8080 + 2 more... 7m48s
nginx 10.244.1.13:80 7d6h
[root@k8s-master chapter1]#
- 查看某个pod的详细信息
[root@k8s-master ~]# kubectl describe pod myweb-pz8wp
Name: myweb-pz8wp
Namespace: default
Priority: 0
Node: k8s-node1/192.168.43.21
Start Time: Thu, 08 Apr 2021 21:19:39 +0800
Labels: app=myweb
Annotations: <none>
Status: Running
IP: 10.244.1.16
IPs:
IP: 10.244.1.16
Controlled By: ReplicationController/myweb
Containers:
myweb:
Container ID: docker://54ab95bea62fec7cec72116c3b286cd30ce64a212779914c260dde361c9bc067
Image: kubeguide/tomcat-app:v1
Image ID: docker-pullable://kubeguide/tomcat-app@sha256:7a9193c2e5c6c74b4ad49a8abbf75373d4ab76c8f8db87672dc526b96ac69ac4
Port: 8080/TCP
Host Port: 0/TCP
State: Running
Started: Thu, 08 Apr 2021 21:19:40 +0800
Ready: True
Restart Count: 0
Environment:
MYSQL_SERVICE_HOST: mysql
MYSQL_SERVICE_PORT: 3306
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-kh4gl (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
default-token-kh4gl:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-kh4gl
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: <none>
[root@k8s-master ~]#
- 修改RC副本的数量
[root@k8s-master ~]# kubectl get rc -o wide
NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR
mysql 1 1 1 135m mysql mysql:5.7 app=mysql
myweb 5 5 5 122m myweb kubeguide/tomcat-app:v1 app=myweb
[root@k8s-master ~]#
[root@k8s-master ~]#
[root@k8s-master ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
mysql-sxwpx 1/1 Running 1 133m 10.244.1.12 k8s-node1 <none> <none>
myweb-9xmz9 1/1 Running 0 116m 10.244.2.4 k8s-node2 <none> <none>
myweb-pz8wp 1/1 Running 0 116m 10.244.1.16 k8s-node1 <none> <none>
myweb-qtrws 1/1 Running 0 116m 10.244.2.3 k8s-node2 <none> <none>
myweb-tkzm5 1/1 Running 0 116m 10.244.2.5 k8s-node2 <none> <none>
myweb-xrw9v 1/1 Running 0 116m 10.244.2.2 k8s-node2 <none> <none>
nginx-f89759699-6v4c6 1/1 Running 3 7d8h 10.244.1.13 k8s-node1 <none> <none>
[root@k8s-master ~]#
[root@k8s-master ~]# kubectl scale rc myweb --replicas=3
replicationcontroller/myweb scaled
[root@k8s-master ~]#
[root@k8s-master ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
mysql-sxwpx 1/1 Running 1 133m 10.244.1.12 k8s-node1 <none> <none>
myweb-pz8wp 1/1 Running 0 117m 10.244.1.16 k8s-node1 <none> <none>
myweb-qtrws 1/1 Running 0 117m 10.244.2.3 k8s-node2 <none> <none>
myweb-xrw9v 1/1 Running 0 117m 10.244.2.2 k8s-node2 <none> <none>
nginx-f89759699-6v4c6 1/1 Running 3 7d8h 10.244.1.13 k8s-node1 <none> <none>
[root@k8s-master ~]#
[root@k8s-master ~]# kubectl get rc -o wide
NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR
mysql 1 1 1 137m mysql mysql:5.7 app=mysql
myweb 3 3 3 124m myweb kubeguide/tomcat-app:v1 app=myweb
[root@k8s-master ~]#

浙公网安备 33010602011771号