kubernetes
一、资源清单
- 清除deployment
[kubeadm@server2 ~]$ kubectl delete deployments.apps myapp
deployment.apps "myapp" deleted
[kubeadm@server2 ~]$ kubectl get pod
NAME READY STATUS RESTARTS AGE
test 1/1 Running 3 68m
- 自动缩进
[kubeadm@server2 ~]$ cat .vimrc
autocmd filetype yaml setlocal ai ts=2 sw=2 et
- 编写资源清单
[kubeadm@server2 ~]$ mkdir manifest
[kubeadm@server2 ~]$ cd manifest/
列出api可用的版本
[kubeadm@server2 manifest]$ kubectl api-versions
admissionregistration.k8s.io/v1
admissionregistration.k8s.io/v1beta1
apiextensions.k8s.io/v1
apiextensions.k8s.io/v1beta1
apiregistration.k8s.io/v1
apiregistration.k8s.io/v1beta1
apps/v1
查看标签
[kubeadm@server2 manifest]$ kubectl get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
test 1/1 Running 3 78m run=test
查看编写pod需要用到的信息
[kubeadm@server2 manifest]$ kubectl explain pod
KIND: Pod
VERSION: v1
DESCRIPTION:
Pod is a collection of containers that can run on a host. This resource is
created by clients and scheduled onto hosts.
FIELDS:
apiVersion <string>
APIVersion defines the versioned schema of this representation of an
object. Servers should convert recognized schemas to the latest internal
value, and may reject unrecognized values. More info:
https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
kind <string>
Kind is a string value representing the REST resource this object
represents. Servers may infer this from the endpoint the client submits
requests to. Cannot be updated. In CamelCase. More info:
https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
metadata <Object>
Standard object's metadata. More info:
https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
spec <Object>
Specification of the desired behavior of the pod. More info:
https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
status <Object>
Most recently observed status of the pod. This data may not be up to date.
Populated by the system. Read-only. More info:
https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
查看sped
[kubeadm@server2 manifest]$ kubectl explain pod.spec
清单
[kubeadm@server2 manifest]$ pwd
/home/kubeadm/manifest
[kubeadm@server2 manifest]$ cat pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: myapp
spec:
containers:
- name: myapp
image: myapp:v1
imagePullPolicy: IfNotPresent
创建
[kubeadm@server2 manifest]$ kubectl create -f pod.yaml
pod/myapp created
[kubeadm@server2 manifest]$ kubectl get pod
NAME READY STATUS RESTARTS AGE
myapp 1/1 Running 0 5s
test 1/1 Running 3 90m
删除
[kubeadm@server2 manifest]$ kubectl delete -f pod.yaml
pod "myapp" deleted
[kubeadm@server2 manifest]$ kubectl get pod
NAME READY STATUS RESTARTS AGE
test 1/1 Running 3 96m
- 再一个pod中创建两个容器
[kubeadm@server2 manifest]$ cat pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: myapp
spec:
containers:
- name: myapp
image: myapp:v1
imagePullPolicy: IfNotPresent
- name: busyboxplus
image: busyboxplus
imagePullPolicy: IfNotPresent
tty: true
[kubeadm@server2 manifest]$ kubectl create -f pod.yaml
pod/myapp created
两个容器
[kubeadm@server2 manifest]$ kubectl get pod
NAME READY STATUS RESTARTS AGE
myapp 2/2 Running 0 8s
test 1/1 Running 3 106m
[kubeadm@server2 manifest]$ kubectl describe pod myapp
Name: myapp
Namespace: default
Priority: 0
Node: server3/172.25.60.3
Start Time: Sat, 18 Apr 2020 11:46:11 +0800
Labels: <none>
Annotations: <none>
Status: Running
IP: 10.244.1.12
IPs:
IP: 10.244.1.12
Containers:
myapp:
Container ID: docker://cf7429b6983c27aea296a06ea02583ee30699cf02546bc6ee50b38dea38a41ad
Image: myapp:v1
Image ID: docker-pullable://myapp@sha256:9eeca44ba2d410e54fccc54cbe9c021802aa8b9836a0bcf3d3229354e4c8870e
Port: <none>
Host Port: <none>
State: Running
Started: Sat, 18 Apr 2020 11:46:14 +0800
Ready: True
Restart Count: 0
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-64lq2 (ro)
busyboxplus:
Container ID: docker://471b69a9325aaeb3cd18855673d7b408f63264bcc9cf30e42ecb5133369ddc73
Image: busyboxplus
Image ID: docker-pullable://busyboxplus@sha256:9d1c242c1fd588a1b8ec4461d33a9ba08071f0cc5bb2d50d4ca49e430014ab06
Port: <none>
Host Port: <none>
State: Running
Started: Sat, 18 Apr 2020 11:46:15 +0800
Ready: True
Restart Count: 0
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-64lq2 (ro)
- 连接busyboxplus容器
出现错误:卡住了
[kubeadm@server2 manifest]$ kubectl attach -it myapp -c busyboxplus
If you don't see a command prompt, try pressing enter.
/ #
可行,并且可以访问另一个容器
[kubeadm@server2 ~]$ kubectl exec -it myapp -c busyboxplus -- sh
/ # curl localhost
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
[kubeadm@server2 manifest]$ kubectl delete -f pod.yaml
pod "myapp" deleted
- 指定端口映射
[kubeadm@server2 manifest]$ cat pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: myapp
spec:
containers:
- name: myapp
image: myapp:v1
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
hostPort: 80
[kubeadm@server2 manifest]$ kubectl create -f pod.yaml
pod/myapp created
[kubeadm@server2 manifest]$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
myapp 1/1 Running 0 14s 10.244.1.13 server3 <none> <none>
test 1/1 Running 3 125m 10.244.2.6 server4 <none> <none>
[root@server3 ~]# iptables -t nat -nL |grep :80
CNI-HOSTPORT-SETMARK tcp -- 10.244.1.13 0.0.0.0/0 tcp dpt:80
CNI-HOSTPORT-SETMARK tcp -- 127.0.0.1 0.0.0.0/0 tcp dpt:80
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 to:10.244.1.13:80
[kubeadm@server2 manifest]$ curl 172.25.60.3
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
[kubeadm@server2 manifest]$ kubectl delete -f pod.yaml
pod "myapp" deleted
- 资源限制
[kubeadm@server2 manifest]$ cat pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: myapp
spec:
containers:
- name: myapp
image: myapp:v1
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
hostPort: 80
resources:
limits:
memory: 100M
requests:
memory: 50M
[kubeadm@server2 manifest]$ kubectl create -f pod.yaml
pod/myapp created
[kubeadm@server2 manifest]$ kubectl describe pod myapp
Limits:
memory: 100M
Requests:
memory: 50M
- 选择节点
[kubeadm@server2 manifest]$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
myapp 1/1 Running 0 8m10s 10.244.2.8 server4 <none> <none>
查看label
[kubeadm@server2 manifest]$ kubectl get node --show-labels
NAME STATUS ROLES AGE VERSION LABELS
server2 Ready master 15h v1.18.1 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=server2,kubernetes.io/os=linux,node-role.kubernetes.io/master=
server3 Ready <none> 15h v1.18.1 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=server3,kubernetes.io/os=linux
server4 Ready <none> 15h v1.18.1 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=server4,kubernetes.io/os=linux
将myapp调到server3节点
[kubeadm@server2 manifest]$ cat pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: myapp
spec:
containers:
- name: myapp
image: myapp:v1
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
hostPort: 80
resources:
limits:
memory: 100M
requests:
memory: 50M
nodeSelector:
kubernetes.io/hostname: server3
[kubeadm@server2 manifest]$ kubectl create -f pod.yaml
pod/myapp created
[kubeadm@server2 manifest]$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
myapp 1/1 Running 0 10s 10.244.1.14 server3 <none> <none>
- 网络(会有资源争抢)
[kubeadm@server2 manifest]$ cat pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: myapp
spec:
containers:
- name: myapp
image: myapp:v1
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
hostPort: 80
resources:
limits:
memory: 100M
requests:
memory: 50M
nodeSelector:
kubernetes.io/hostname: server3
hostNetwork: true
[kubeadm@server2 manifest]$ kubectl create -f pod.yaml
pod/myapp created
[kubeadm@server2 manifest]$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
myapp 0/1 ContainerCreating 0 5s 172.25.60.3 server3 <none> <none>
[root@server3 ~]# netstat -antlp|grep :80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 5461/nginx: master
[kubeadm@server2 manifest]$ curl 172.25.60.3
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>