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实现

posted @ 2021-07-20 16:13  Jeff的技术栈  阅读(109)  评论(0编辑  收藏  举报
回顶部