0
点赞
收藏
分享

微信扫一扫

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

瑾谋 2022-08-25 阅读 50

本篇文章分为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 条评论