–图by b站up主“自学自讲”
- pod
Pod是Kubernetes创建或部署的最小/最简单的基本单位,一个Pod代表集群上正在运行的一个进程。
一个Pod封装一个应用容器(也可以有多个容器),存储资源、一个独立的网络IP以及管理控制容器运行方式的策略选项。Pod代表部署的一个单位:Kubernetes 中单个应用的实例,它可能由单个容器或多个容器共享组成的资源。
- lable
是附加到 Kubernetes 对象(比如 Pod)上的键值对。 标签旨在用于指定对用户有意义且相关的对象的标识属性,但不直接对核心系统有语义含义。 标签可以用于组织和选择对象的子集。标签可以在创建时附加到对象,随后可以随时添加和修改。 每个对象都可以定义一组键/值标签。每个键对于给定对象必须是唯一的。
- deployment
一个 Deployment 为 Pod 和 ReplicaSet 提供声明式的更新能力。
你负责描述 Deployment 中的目标状态,而 Deployment 控制器(Controller) 以受控速率更改实际状态, 使其变为期望状态。你可以定义 Deployment 以创建新的 ReplicaSet,或删除现有 Deployment, 并通过新的 Deployment 收养其资源。
- ReplicaSet(RS)
ReplicaSet 的目的是维护一组在任何时候都处于运行状态的 Pod 副本的稳定集合。 因此,它通常用来保证给定数量的、完全相同的 Pod 的可用性。
- ingress
Ingress :是对集群中服务的外部访问进行管理的 API 对象,典型的访问方式是 HTTP。
- service
Service 将运行在一个或一组 Pod 上的网络应用程序公开为网络服务的方法 ,TCP。
- 网络解决方案
在整个kubernetes集群里,pod都是分布在不同的主机上的,为了实现这些pod的跨主机通信所以我们必须要安装CNI网络插件
例如Calico 、flannel
kubectl命令
root@k8s-master:~/helm3# kubectl --help
kubectl controls the Kubernetes cluster manager.
Find more information at: https://kubernetes.io/docs/reference/kubectl/
Basic Commands (Beginner):
create Create a resource from a file or from stdin
expose Take a replication controller, service, deployment or pod and expose it as a new
Kubernetes service
run Run a particular image on the cluster
set Set specific features on objects
#获取资源对象的相关属性
Basic Commands (Intermediate):
explain Get documentation for a resource
get Display one or many resources
edit Edit a resource on the server
delete Delete resources by file names, stdin, resources and names, or by resources and label selector #基于yaml的资源对象删除
部署
Deploy Commands:
rollout Manage the rollout of a resource #部署和回滚
scale Set a new size for a deployment, replica set, or replication controller #扩容
autoscale Auto-scale a deployment, replica set, stateful set, or replication controller
Troubleshooting and Debugging Commands:
describe Show details of a specific resource or group of resources #查看资源对象创建过程
logs Print the logs for a container in a pod
attach Attach to a running container
exec Execute a command in a container
port-forward Forward one or more local ports to a pod
proxy Run a proxy to the Kubernetes API server
cp Copy files and directories to and from containers
auth Inspect authorization
debug Create debugging sessions for troubleshooting workloads and nodes
events List events
Advanced Commands:
diff Diff the live version against a would-be applied version
apply Apply a configuration to a resource by file name or stdin #基于资源清单创建资源对象
patch Update fields of a resource
replace Replace a resource by file name or stdin
wait Experimental: Wait for a specific condition on one or many resources
kustomize Build a kustomization target from a directory or URL
pod
创建pod
kubectl run
以nginx为例
#创建
kubectl run nginx --image=nginx
#查看pods
root@k8s-master:/etc/containerd# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 7m24s
#接入
root@k8s-master:/etc/containerd# kubectl exec -it nginx -- /bin/bash
root@nginx:/#
#查看详细信息
root@k8s-master:/etc/containerd# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx 1/1 Running 0 9m15s 10.168.61.200 k8s-01 <none> <none>
#测试
curl 10.168.61.200
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
..................
注意10.168.61.200为pod的ip,只有k8s集群内部的节点有权访问
yaml
基于资源清单文件创建
kubectl run nginx --image=nginx --dry-run=client -o yaml >pod_create.yaml
vi pod_create.yaml
apiVersion: v1
kind: Pod
metadata:
# creationTimestamp: null
labels:
run: nginx
name: nginx
spec:
containers:
- image: nginx
name: nginx
# resources: {}
# dnsPolicy: ClusterFirst
# restartPolicy: Always
#status: {}
kubectl apply -f pod_create.yaml
root@k8s-master:/data/kubernetes/pod# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx 1/1 Running 0 37m 10.168.61.200 k8s-01 <none> <none>
nginx1 1/1 Running 0 40s 10.168.165.196 k8s-03 <none> <none>
deployment
pod的自动化部署管理
kubectl create deployment
root@k8s-master:~# kubectl create deployment my-nginx --image=nginx
deployment.apps/my-nginx created
root@k8s-master:~# kubectl get pod
NAME READY STATUS RESTARTS AGE
my-nginx-7fbf685c4d-kkcqt 1/1 Running 0 12s
nginx 1/1 Running 0 65m
nginx1 1/1 Running 0 29m
root@k8s-master:~# kubectl get deployments.apps
NAME READY UP-TO-DATE AVAILABLE AGE
my-nginx 1/1 1 1 26s
root@k8s-master:~# kubectl get rs
NAME DESIRED CURRENT READY AGE
my-nginx-7fbf685c4d 1 1 1 2m11s
root@k8s-master:~#
yml
kubectl create deployment my-nginx --image=nginx --dry-run=client -o yaml >deployment_creat.yml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: my-nginx
name: my-nginx
spec:
replicas: 1 #控制pod数量
selector:
matchLabels:
app: my-nginx #deployment通过该标签管理pod
strategy: {}
template:
metadata:
labels:
app: my-nginx #pod标签
spec:
containers:
- image: nginx
name: nginx
从上面内容可以看出,deployment主要通过1.rc控制数量2.标签选择器3.pod模板来实现的
资源对象扩缩容/修改
edit --原有资源对象的基础上修改
kubectl edit deployments.apps my-nginx-deploy
scale --直接动态调整数量
kubectl scale deployment my-nginx-deploy --replicas=10
kubectl scale deployment my-nginx-deploy --replicas=1
set --直接动态调整属性
kubectl set image deployment my-nginx-deploy nginx=xxx