Mars's Blog

K8s 学习

2021-09-04

阅读

容器和k8s发展史

“编排” 是容器云项目的灵魂

Docker 提供了一种非常方便的打包机制,直接打包了应用运行所需要的操作系统(只打包文件系统,不包括操作系统内核),保证了本地和云端的一致

Docker 通过容器镜像,解决了应用打包这个根本难题

容器本身没有价值,有价值的是容器编排

容器的隔离和限制技术

容器是一种沙盒技术,因此应用之间有了边界而不相互干扰,而这些应用也容易进行搬运

进程:

程序的执行:从磁盘的二进制文件 转换为 计算机内存中的数据(从磁盘读数据到内存),寄存器的值,堆栈的指令,被打开的文件,以及设备状态信息的集合

程序运行起来后计算机执行环境的总和,就是进程

容器的核心功能:通过约束和修改进程的动态表现,来创造一个边界

Cgroup 制造约束

Namespace用来修改进程视图

docker run命令:

1
docker run -it busybox /bin/sh

-it 表示 通过tty和容器内部进行交互

/bin/sh 表示需要运行的应用

docker 并没有一个真的容器运行在宿主机,docker 帮助用户启动一个应用进程,并且加上了各种各样的Namespace参数,这样就会对文件,网络等形成隔离。

疑问:在一个容器内启动一个java进程,但可以在容器内执行多个命令,这是为什么?

命令是在运行过程中运行的,但不受docker的控制,就像野孩子

单进程的含义不是只能运行一个进程,而是只有一个进程是可控的(相当于docker容器是一个进程组,但只有一个进程是可控的)

对隔离环境负责的是宿主环境本身

docker和其他应用应该是同级别,用户在容器中运行的进程,和其他进程一样,都由宿主机进行管理,只不过这些隔离的进程有额外的namespace参数。而进程使用能使用的资源量,受到Cgroups的限制

限制

Linux Control Group,限制一个进程组使用资源的上限,包括CPU,内存,磁盘,网络带宽

linux系统下 /proc显示的是CPU相关状态信息

总结:

Docker的核心原理:

创建一个用户进程,并且启动Namespace配置,设置指定的Cgroup参数,切换进程的根目录

镜像

挂载在容器根目录,为容器进程提供隔离后环境的文件系统,即为容器镜像;也叫rootfs

ingress

包含两个组件:ingress和ingress-controller

https://cloud.tencent.com/developer/article/1167282

service的入口,定义了规则,通过它定义好的域名的请求转发到集群中的service

每添加一个新服务,只要写一个新的ingress的yaml即可

相当于将nginx的配置抽象为ingress对象

image-20210814134622690
ingress controller

把新加入的ingress转化为nginx的配置并生效

image-20210814140841896

相关命令

运行参数
1
2
3
-server -jar /app/eval-0.0.1-SNAPSHOT.jar --spring.config.additional-location=config.yml -Duser.timezone=GMT+8 &>/app/log/$(date +%Y-%m-%d_%H-%M-%S.log) &

-server -jar /app/seecoder-paas.jar --spring.config.additional-location=config.yml -Duser.timezone=GMT+8 &>/app/log/$(date +%Y-%m-%d_%H-%M-%S.log) &
获得所有namespace下的pod
1
kubectl get pods --all-namespaces
进入pod
1
kubectl exec -it -n [namespace] [podName] bash
获得某个namespace下的pod信息

kubectl get pods -n [namespace]

详细信息:

kubectl get pods -n [namespace] -o wide

查看ingress-controller位置

kubectl get po -o wide -n ingress-nginx

从pod导出文件到服务器

kubectl cp -n seec environment-21-67-6559c6bf8f-gdq49:dev.sql /home/dev.sql

查看ingress的配置
1
kubectl get ingress -n [namespace] [ingress name] -o yaml
查看nginx-ingress

kubectl get pod -n ingress-nginx

获得nginx-ingress配置

kubectl get configmap -n ingress-nginx

kubectl edit configmap -n -o yaml

创建secret
1
kubectl create secret tls seecoder-paas  --cert=./certificate/6044117__seec.seecoder.cn.pem --key=./certificate/6044117__seec.seecoder.cn.key --namespace seec
修改ingress配置
1
kubectl edit ingress [ingress name] -n seec

太棒的文档:

https://feisky.gitbooks.io/kubernetes/content/concepts/ingress.html

修改ingress-controller启动命令行配置(暂未确定是否在这里改)
1
2
kubectl get pod -n ingress-nginx
kubectl edit pod -n ingress-nginx nginx-ingress-controller-lg2bq

tls配置

1
2
3
4
tls:
- hosts:
- seec.seecoder.cn
secretName: seecoder-paas
Tags: Devops