0
点赞
收藏
分享

微信扫一扫

【云原生】Kubernetes核心技术(中)

瑾谋 2022-08-25 阅读 57

本篇文章分为3次分享完

四、持久化 Volume

1.数据卷 volume

2. 分为三类:

3.分别讲解

 (1)bind mount volume

1.创建本地目录
root@123  
mkdir  /webroom
root@123 ~  
echo "123" > /webroom/index.html

2.挂载和运行容器
docker run -v    # 挂载数据卷 Bind mount a volume
root123-z ~  
docker run -v /webroom:/usr/share/nginx/html -d -P nginx
root123-z ~  
docker ps -q

3.查看bind
root@123 /webroom  
docker inspect 553d7e454376|grep "Mounts" -A7
      "Mounts": [
          {
              "Type": "bind",
              "Source": "/webroom",
              "Destination": "/usr/share/nginx/html",
              "Mode": "",
              "RW": true,
              "Propagation": "rprivate"
root@123 /webroom  
docker inspect 553d7e454376|grep IPAddress       
            "SecondaryIPAddresses": null,
            "IPAddress": "ip地址",
                    "IPAddress": "ip地址",

4.验证
root@123 ~  
curl ip地址

(2)Docker Management Volume

1.开启容器
root@123 ~  
docker run -v /usr/share/nginx/html -d -P nginx
root@123 ~  
docker ps -q

2.查看配置
root@123 ~  
docker inspect acc5955cc2db |grep "Mounts" -A7
     "Mounts": [
        {
            "Type": "volume",
            "Name": "7f9f40b822f3353819401c0dc2df116f732c1e9ae839433d3de61d03fd84eccd",
            "Source": "/var/lib/docker/volumes/7f9f40b822f3353819401c0dc2df116f732c1e9ae839433d3de61d03fd84eccd/_data",
            "Destination": "/usr/share/nginx/html",
            "Driver": "local",
            "Mode": "",


3.查看目录
root@123 ~  
ls  /var/lib/docker/volumes

4.删除容器
root@123 ~  
docker stop acc5955cc2db
acc5955cc2db
root@123 ~  
docker rm -v  acc5955cc2db


5.批量删除其他
docker volume rm $(docker volume ls -qf dangling=true)

(3)Container Data (基于现有的容器)

1.运行容器
root@123 ~  
docker run -d --name nginx1 nginx

2.容器共享
root@123 ~  
docker run --volumes-from nginx1 -d nginxv

4.docker volume 命令

root@123 ~  
docker volume --help
Usage:	docker volume COMMAND
Manage volumes
Commands:
  create      Create a volume
  inspect     Display detailed information on one or more volumes
  ls          List volumes
  prune       Remove all unused local volumes
  rm          Remove one or more volumes

1.创建
root@123 ~  
docker volume create vol1

root@123 ~  
ls /var/lib/docker/volumes/

2.查询列表
root@123 ~  
docker volume ls        
DRIVER              VOLUME NAME
local               vol1

3.查看配置信息
root@123 ~  
docker volume inspect vol1
[
  {
     "CreatedAt": "2019-08-15T04:48:40-04:00",
     "Driver": "local",
     "Labels": {},
     "Mountpoint": "/var/lib/docker/volumes/vol1/_data",
     "Name": "vol1",
     "Options": {},
     "Scope": "local"
  }
]

4.批量删除
docker volume rm $(docker volume ls -qf dangling=true)

五、Ingress

1.简介

Ingress 使用开源的反向代理负载均衡器来实现对外暴漏服务,比如 Nginx、Apache、Haproxy等。Nginx Ingress 一般有三个组件组成:

2.实现方案

3.分布介绍

(1)nginx:这是方式进行实现

1.安装
ingress https://kubernetes.github.io/ingress-nginx/
ingress https://github.com/kubernetes/ingress-nginx

2.部署
$ wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.0.0/deploy/static/provider/baremetal/deploy.yaml

3.配置镜像
# 修改镜像地址
$ sed -i 's@k8s.gcr.io/ingress-nginx/controller:v1.0.0\(.*\)@willdockerhub/ingress-nginx-controller:v1.0.0@' deploy.yaml
$ sed -i 's@k8s.gcr.io/ingress-nginx/kube-webhook-certgen:v1.0\(.*\)$@hzde0128/kube-webhook-certgen:v1.0@' deploy.yaml
$ kubectl apply -f deploy.yaml
$ docker image load -i hzde0128-kube-webhook-certgen-v1.0.tar
$ docker image load -i willdockerhub-ingress-nginx-controller-v1.0.0.tar
$ docker images

4.运行
$ kubectl apply -f ingress-nginx.yaml

5.检查是否安装成功
$ kubectl get pod -n ingress-nginx
$ kubectl get svc -n ingress-nginx

 创建NGINX

1.创建目录

$ mkdir -p /opt/ingress/nginx-test
$ cd /opt/ingress/nginx-test

2.创建nginx-Deployment-Service.yaml文件

$ cat << EOF > nginx-Deployment-Service.yaml
apiVersion: apps/v1 
kind: Deployment   
metadata:             
  name: nginx-deployment     
  labels:       
    app: nginx  
spec:          
  replicas: 2 
  selector:      
    matchLabels: 
      app: nginx
  minReadySeconds: 1
  progressDeadlineSeconds: 60
  revisionHistoryLimit: 2
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 1
  template:        
    metadata:  
      labels:  
        app: nginx
    spec:         
      containers:     
      - name: nginx     
        image: nginx:1.17.1    
        imagePullPolicy: Always          
        ports:
        - containerPort: 80
        resources:
          requests:
            memory: "1Gi"
            cpu: "80m"
          limits: 
            memory: "1Gi" 
            cpu: "80m"
---
apiVersion: v1
kind: Service
metadata:      
  name: nginx-service
  labels:      
    app: nginx
spec:        
  selector:   
    app: nginx
  ports:
  - name: nginx-port 
    protocol: TCP      
    port: 80  
    targetPort: 80
  type: ClusterIP 
EOF


3.部署 nginx应用

$ kubectl apply -f nginx-Deployment-Service.yaml
$ kubectl get svc -o wide|grep nginx-service
$ kubectl get pod -o wide|grep nginx-deployment-*


4.创建 ingress yaml文件,内容如下:

cat << EOF > nginx-Ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - host: ingress.nginx.com
    http:
      paths:
      - path: "/"
        pathType: Prefix
        backend:
          service:
            name: nginx-service
            port:
              number: 80
EOF

4.创建nginx-Ingress.yaml文件
$ kubectl apply -f nginx-Ingress.yaml
$ kubectl get ingress|grep nginx

5.配置ip
$ kubectl get ingress|grep nginx
$ cat /etc/hosts
$ kubectl get svc -n ingress-nginx

6.验证
curl -I http://ingress.nginx.com:端口号

(2)Traefik:这种设计就是为微服务这种动态生成而生的

 

 traefik----系统默认提供

[root@localhost k8sYmal]# kubectl get pods -n kube-system 
NAME                                      READY   STATUS      RESTARTS   AGE
helm-install-traefik-crd-gbnq4            0/1     Completed   0          54d
helm-install-traefik-tp89r                0/1     Completed   0          54d
metrics-server-86cbb8457f-xspd4           1/1     Running     4          54d
svclb-traefik-m42nh                       2/2     Running     8          54d
local-path-provisioner-5ff76fc89d-cx49l   1/1     Running     5          54d
coredns-7448499f4d-9gzt9                  1/1     Running     4          54d
traefik-97b44b794-dsldn                   1/1     Running     4          54d

配置:

1.安装 Traefik
$ kubectl apply -f https://www.qikqiak.com/k8strain/network/manifests/traefik/crd.yaml
$ kubectl apply -f https://www.qikqiak.com/k8strain/network/manifests/traefik/rbac.yaml
$ kubectl apply -f https://www.qikqiak.com/k8strain/network/manifests/traefik/deployment.yaml
$ kubectl apply -f https://www.qikqiak.com/k8strain/network/manifests/traefik/dashboard.yaml

2.traefik 代理------http协议方向
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: simpleingressroute
spec:
  entryPoints:
    - web
  routes:
  - match: Host(`who.qikqiak.com`) && PathPrefix(`/notls`)
    kind: Rule
    services:
    - name: whoami
      port: 80

3.traefik 代理------tcp协议方向
[root@localhost k8sYmal]# cat traefik-tcp.yaml 
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRouteTCP
metadata:
  name: mongo-traefik-tcp
spec:
  entryPoints:
    - mongo
  routes:
  - match: HostSNI(`*`)
    services:
    - name: nginx-traefik
      port: 端口号


六、StatefulSet

 

1.简介

StatefulSet是k8s中有状态应用管理的标准实现,今天就一起来了解下其背后设计的场景与原理,从而了解其适用范围与场景。

2.特点

(1)有状态与无状态

 通常可以分为两大类:有状态与无状态,比如web服务通常都是无状态的,web应用数据主要来自后端存储、缓存等中间件,而本身并不保存数; 而诸如redis、es等其数据也是应用自身的一部分,由此可以看出有状态应用本身会包含两部分:应用与数据。

(2)一致性与数据

 一致性是分布式系统中很常见的问题,上面提到有状态应用包含数据部分,那数据和一致性是不是一个东西呢?答案是并不一定,在诸如zookeeper等应用中,会通过zab协议保证数据写入到集群中的大多数节点,而在诸如kafka之类的应用其一致性设计要求相对较低,由此可以看出有状态应用数据的一致性,更多的是由对应场景的系统设计而决定。

(3)单调有序

 通常分布式系统中都至少要保证分区容忍性,以防止部分节点故障导致整个系统不可用,在k8s中的statefulset中的 Pod的管理策略则是保证尽可能安全的逐个Pod更新,而不是并行启动或停止所有的Pod。

3.部署命令

##############所有命令##############
1.创建
kubectl create -f test-zk-ss.yaml

2.删除
kubectl delete -f test-zk-ss.yaml      #删除模板
kubectl delete statefulset test-zk-ss  #删除名称

3.更新
kubectl apply -f test-zk-ss-new.yaml   #更新模板
kubectl edit statefulset test-zk-ss    #更新名称

4.查询
kubectl get statefulset test-zk-ss -o yaml    #查询模板
kubectl describe statefulset test-zk-ss       #查询名称

七、小结

本篇云原生更行到第二部分----Kubernetes核心技术(中)

后面继续分享,敬请期待

举报

相关推荐

0 条评论