RESTful
GET PUT DELETE POST,....
kubectl run,get,edit,....
资源:对象
workload: Pod,ReplicaSet,Deployment,StatefulSet,DaemonSet,Job,Cronjob,...
服务发现及均衡:service,Ingress,....
配置与存储:Volume,CSI
ConfigMap,secret
DownwardAPI
集群级资源
Namespace,Node,Role,ClusterRole,RoleBinding,ClusterRoleBingding
元数据型资源
HPA,PodTemplate,LimitRange..
创建资源的方法:
apiserver只接收json格式的资源定义;
yaml格式提供配置清单,apiserver可自动将其转为json格式,然后在提交;
查看pod yaml 配置清单
[root@k8s-master ~]# kubectl get pod myapp-9b4987d5-244dl -o yaml
大部分资源配置清单:
apiversion group/version
[root@k8s-master ~]#kubectl api-versions
admissionregistration.k8s.io/v1beta1
apiextensions.k8s.io/v1beta1
apiregistration.k8s.io/v1
apiregistration.k8s.io/v1beta1
apps/v1
apps/v1beta1
apps/v1beta2
authentication.k8s.io/v1
authentication.k8s.io/v1beta1
authorization.k8s.io/v1
authorization.k8s.io/v1beta1
autoscaling/v1
autoscaling/v2beta1
autoscaling/v2beta2
batch/v1
batch/v1beta1
certificates.k8s.io/v1beta1
coordination.k8s.io/v1beta1
events.k8s.io/v1beta1
extensions/v1beta1
networking.k8s.io/v1
policy/v1beta1
rbac.authorization.k8s.io/v1
rbac.authorization.k8s.io/v1beta1
scheduling.k8s.io/v1beta1
storage.k8s.io/v1
storage.k8s.io/v1beta1
v1
kind : 资源类别
metadata:元数据
name
namespace
labels
annotations 注解
每个资源的引用PATH 小写的是固定的格式
/api/GROUP/version/namespace/Namespache/TYPE/NAME
spec: 期望的状态,disired State
status: 当前状态,current state,本字段由k8s集群维护
参考定义说明: 如果是对象,可以一直按下面规则一级一级访问
kubectl explain pods
kubectl explain pods.metadata
kubectl explain pods.spec.containers
vim pod-demo.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-demo
namespace: default
labels:
app: myapp
tier: frontend
spec:
containers:
- name: myapp
image: ikubernetes/myapp:v1
- name: busybox
image: busybox:latest
command:
- "/bin/sh"
- "-c"
- "echo test-page >> /usr/share/nginx/html/index.html "
注意列表的写法:一般用第二种
第一种
command: ["/bin/sh","-c","sleep 3】
第二种,还用- 来指
command
- "/bin/sh"
- - "sleep 3600"
[root@k8s-master k8s]# kubectl create -f pod-demo.yaml
pod/pod-demo created
kubectl get pods pod-demo
NAME READY STATUS RESTARTS AGE
pod-demo 2/2 Running 2 34s
kubectl describe pods pod-demo 查看详细的信息
[root@k8s-master k8s]# curl 10.244.1.154
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
[root@k8s-master k8s]# kubectl logs pod-demo myapp
10.244.0.0 - - [22/Apr/2019:11:22:21 +0000] "GET / HTTP/1.1" 200 65 "-" "curl/7.29.0" "-"
[root@k8s-master k8s]# kubectl exec -it pod-demo -c myapp -- /bin/sh
/ # cat /usr/share/nginx/html/index.html
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
[root@k8s-master k8s]# kubectl logs pod-demo busybox
/bin/sh: can't create /usr/share/nginx/html/index.html: nonexistent directory
[root@k8s-master k8s]# kubectl get pods pod-demo
NAME READY STATUS RESTARTS AGE
pod-demo 1/2 CrashLoopBackOff 6 8m1s
上面测试会有问题的,因为他们没有共享存储卷,等学习了以后在测试,以上的测试是为排查错误
修改一下
vim pod-demo.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-demo
namespace: default
labels:
app: myapp
tier: frontend
spec:
containers:
- name: myapp
image: ikubernetes/myapp:v1
- name: busybox
image: busybox:latest
command:
- "/bin/sh"
- "-c"
- "sleep 3600"
[root@k8s-master k8s]# kubectl delete -f pod-demo.yaml
pod "pod-demo" deleted
[root@k8s-master k8s]# kubectl create -f pod-demo.yaml
pod/pod-demo created
[root@k8s-master k8s]# kubectl get pods -o wide
pod-demo 2/2 Running 0 32s 10.244.2.21 k8s-node1 <none> <none>
[root@k8s-master k8s]# curl 10.244.2.21
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
[root@k8s-master k8s]# kubectl logs pod-demo myapp
10.244.0.0 - - [22/Apr/2019:11:33:36 +0000] "GET / HTTP/1.1" 200 65 "-" "curl/7.29.0" "-"
一个简单的应用实例: mysql+tomcat web 站点
vim 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.5.62 注意不要安装最新版本8.0,要不下面的myweb 会报错,因为版本太老,不兼容
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: "123456"
vim mysql-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
ports:
- port: 3306
selector:
app: mysql
vim myweb-rc.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: myweb
spec:
replicas: 3
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'
vim myapp-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: myweb
spec:
type: NodePort
ports:
- port: 8080
nodePort: 30001
selector:
app: myweb
上面的也可以定义Deployment 的资源
apiVersion: apps/v1
kind: Deployment
metadata:
name: myweb
spec:
replicas: 3
selector:
matchLabels:
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'
kubectl create -f mysql-rc.yaml
kubectl create -f mysql-svc.yaml
kubectl create -f myweb-rc.yaml
kubectl create -f myweb-svc.yaml
[root@k8s-master k8s]# kubectl get pods
NAME READY STATUS RESTARTS AGE
mysql-7z4jg 1/1 Running 0 22m
myweb-hqk9w 1/1 Running 0 66m
myweb-mx42c 1/1 Running 0 66m
myweb-qx4qd 1/1 Running 0 6
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 38d
mysql ClusterIP 10.106.94.52 <none> 3306/TCP 23m
myweb NodePort 10.102.186.62 <none> 8080:30001/TCP 64m
[root@k8s-master k8s]# kubectl get rc
NAME DESIRED CURRENT R EADY AGE
mysql 1 1 1 23m
myweb 3 3 3 66m