k8s基础
基础应用
1、k8s中的名称空间
k8s中名称空间是用来隔离集群资源,而k8s中的资源也分为名称空间级资源以及集群级资源。
# kubectl是k8s客户端,它跟k8s没有任何关系。
## kubectl get [资源名称] 获取集群资源的命令
# 获取名称空间
[root@k8s-m-01 ~]# kubectl get namespace
NAME STATUS AGE
default Active 5d16h
kube-node-lease Active 5d16h
kube-public Active 5d16h
kube-system Active 5d16h
[root@k8s-m-01 ~]# kubectl get ns
NAME STATUS AGE
default Active 5d16h
kube-node-lease Active 5d16h
kube-public Active 5d16h
kube-system Active 5d16h
# 注:部署应用一般是部署在自己的名称空间之内
[root@k8s-m-01 ~]# kubectl create namespace wordpress
namespace/wordpress created
2、标签
# docker中的TAG = 仓库URL/名称空间/仓库名称:版本号
k8s当做标签是用来管理(识别一系列)容器,方便与管理和监控拥有同一标签的所有容器
apiVersion: v1
kind: Pod
metadata:
name: test-tag
labels:
release: stable
spec:
containers:
- name: nginx
image: nginx
# 查看label
[root@k8s-m-01 ~]# kubectl get pod --show-labels
# 增加标签
kubectl label pod(资源类型) test-tag app=tag
[root@k8s-m-01 ~]# kubectl label pod test-tag app=tag
pod/test-tag labeled
[root@k8s-m-01 ~]# kubectl get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
test-tag 0/1 ImagePullBackOff 0 2m15s app=tag,release=stable
# 删除标签
[root@k8s-m-01 ~]# kubectl label pod test-tag app-
pod/test-tag labeled
# 修改标签
## 先删除后增加
3、k8s中的命名规范
1、必须小写
2、必须以字母开头
3、名称当中只能够包含字母、数字和中划线(-)
4、k8s中常用的命令
# 获取资源
kubectl get [资源名称]
# 创建资源
kubectl apply [资源类型] [资源名称]
kubectl apply -f [资源清单的路径]
5、控制器
k8s中控制器分为:deployment、DaemonSet、StatufluSet
Deployment:一般用来部署长期运行的、无状态的应用
特点:集群之中,随机部署
DaemonSet:每一个节点上部署一个Pod,删除节点自动删除对应的POD(zabbix-agent)
特点:每一台上有且只有一台
StatudfluSet: 部署有状态应用
特点:有启动顺序
控制器使用来做什么的?
- 管理Pod
Deploymnet:在Deployment对象中描述所需的状态,然后Deployment控制器将实际状态以受控的速率更改为所需的状态。
apiVersion: apps/v1
kind: Deployment
metadata:
name: deployment
spec:
replicas: 1
selector:
matchLabels:
release: stable
template:
metadata:
name: test-tag
labels:
release: stable
spec:
containers:
- name: nginx
image: nginx
# 弹性扩容
1、修改配置清单
[root@k8s-m-01 ~]# kubectl edit deployments deployment
deployment.apps/deployment edited
2、打标签
[root@k8s-m-01 ~]# kubectl patch deployments.apps deployment -p '{"spec":{"replicas":40}}'
3、scale
[root@k8s-m-01 ~]# kubectl scale deployment/deployment --replicas=4
# 更新
apiVersion: apps/v1
kind: Deployment
metadata:
name: django
spec:
replicas: 1
selector:
matchLabels:
app: stable
template:
metadata:
labels:
app: stable
spec:
containers:
- name: nginx2
image: nginx:1.17.10
- name: nginx1
image: nginx:1.17.10
# 更新镜像
1、打标签
[root@k8s-m-01 ~]# kubectl patch deployments.apps django -p '{"spec":{"template":{"spec":{"containers":[{"image":"nginx:1.18.0", "name":"nginx"}]}}}}'
2、修改配置清单
3、设置镜像
[root@k8s-m-01 ~]# kubectl set image deployment/django nginx=nginx:1.16.0
deployment.apps/django image updated
4、edit
kubectl edit [资源类型] [资源名称]
# 回滚
[root@k8s-m-01 ~]# kubectl rollout undo deployment django
deployment.apps/django rolled back
[root@k8s-m-01 ~]# kubectl rollout undo deployment django --to-revision=1
deployment.apps/django rolled back
5、DaemonSet
# 在集群中所有的节点上部署只部署一个Pod
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: zabbix-agent
spec:
selector:
matchLabels:
app: zabbix-agent
template:
metadata:
labels:
app: zabbix-agent
spec:
containers:
- name: zabbix-agent
image: zabbix/zabbix-agent:5.2.6-centos
# 更新
1、修改配置文件
[root@k8s-m-01 ~]# kubectl edit daemonsets.apps zabbix-agent
daemonset.apps/zabbix-agent edited
2、打标签的方式
[root@k8s-m-01 ~]# kubectl patch daemonsets.apps zabbix-agent -p '{"spec":{"template":{"spec":{"containers":[{"image":"zabbix/zabbix-agent:centos-5.2.4", "name":"zabbix-agent"}]}}}}'
daemonset.apps/zabbix-agent patched
3、设置镜像
[root@k8s-m-01 ~]# kubectl set image daemonset/zabbix-agent zabbix-agent=zabbix/zabbix-agent:centos-5.2.3
daemonset.apps/zabbix-agent image updated
# 回滚
## 回滚到上一个版本
[root@k8s-m-01 ~]# kubectl rollout undo daemonset zabbix-agent
daemonset.apps/zabbix-agent rolled back
## 回滚到指定版本
[root@k8s-m-01 ~]# kubectl rollout undo daemonset zabbix-agent --to-revision=1
daemonset.apps/zabbix-agent rolled back
6、智能负载均衡器(service)
怎样让外界的可访问我们的服务?
怎样找到对应的POD?
# 关联哪些POD
# 怎样暴露服务
apiVersion: v1
kind: Service
metadata:
name: service
spec:
selector:
release: stable
ports:
- name: http
port: 80
targetPort: 80
protocol: "TCP"
- name: https
port: 443
targetPort: 443
protocol: "TCP"
7、service当中的四种类型
# CluserIP : 向集群内部暴露一个IP
# NodePort : 在宿主主机中开启一个端口与负载均衡IP的端口一一对应,外界可以使用宿主主机的端口访问集群内部服务
# LoadBalancer:是实现暴露服务的另一种解决方案,它依赖于公有云弹性IP实现
选择了IT,必定终身学习