Kubernetes(K8s)的原理与安装

193 阅读3分钟

本人已参与【新人创作礼】,一起开启掘金创作之路。

什么是Kubernetes?

Kubernetes简称K8s,是一个跨主机集群的开源的容器调度平台,他可以自动化应用容器的部署,扩展和操作,提供以容器为中心的基础架构,谷歌旗下开源软件。

kubernetes都能做什么?

1. 可以进行一些自动化的部署和复制

通过脚本规划好容器在哪台服务器运行、运行多少副本,K8S都能自动创建部署

2. 随时扩展和收缩容器规模

K8S支持自动或者手动的调节容器规模,例如数据库压力大时,动态增加数据的计算单元,服务器压力小时动态缩减tomcat的数量。

3. 容器分组,并且提供容器之间的负载均衡

K8S还支持容器间的负载均衡,通常在项目中做集群部署,大多使用Nginx做前置服务器分发请求,但是现在完全可以交给K8S去做负载均衡,因为K8S提供了容器间的负载均衡。

4. 实时监控,及时故障发现,自动替换

K8S支持实时监控,自动处理故障,当某个应用服务挂掉时,K8S会剔除掉对应服务并尝试自动重启服务。

Kubernetes安装:

三台机器同样配置:

首先关闭防火墙:

systemctl stop firewalld
setenforce 0
vim /etc/selinux/config

1.png

同步时间:

   cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 

配置主机名解析:

    vim /etc/hosts
    

image.png

ssh免密操作:

ssh-keygen  (一路回车)
ssh-copy-id 192.168.190.2  (要去免密的主机号)

安装docker:

上传或下载docker源,docekr-compose

 mv docker-ce_aliyun.repo /etc/yum.repos.d/   (移动到源仓库)
 yum -y install docekr-ce      (下载docker-ce 商业版)
 systemctl start docker   
 vim /etc/docker/daemon.json
 

image.png

 systemctl restart docker    (重启一下)
 docker info     (查看docker的信息)
 

image.png

出现这个就成功了!

docker-compose的使用:

mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose   
chmod +x /usr/local/bin/docker-compose    (赋予权限)

kubernetes安装:

上传源:

mv kubernets.repo /etc/yum.repos.d/  (放到源仓库)
yum clean all && yum makecache  (加载测试一下源)
free -m    (查看分区)
swapoff  -a    (关闭分区)
vim /etc/fstab  (为了防止重启后再次生效注释掉swap分区)

image.png

Kubernetes的配置文件:

vim /etc/sysctl.d/k8s.conf

image.png

查看是否成功:

image.png

然后重启一下docker,避免出现其他错误(仅个人认为)。

下载:

yum -y install kubelet-1.22.4 kubeadm-1.22.4 kubecrl-1.22.4  (下载)

systemctl start kubelet && systemctl enable kubelet         (开启开机自启)

master结点配置:

kubeadm init \
    --apiserver-advertise-address=192.168.190.66 \  (主节点的IP)
    --image-repository registry.aliyuncs.com/google_containers \
    --kubernetes-version v1.22.4 \
    --service-cidr=10.96.0.0/12 \
    --pod-network-cidr=10.244.0.0/16 \
    --ignore-preflight-errors=all

可以写个脚本去执行!

初始化后执行:

image.png

Node结点配置:

把master初始化后得到的最后两行代码复制到2个Node结点上:

image.png

在master上查看:

image.png

设置网络:

  wget https://docs.projectcalico.org/v3.14/manifests/calico.yaml --no-check-certificate

image.png

等一会再查看一下nodes变成这样就成功了

image.png

基础使用:

   docekr load -i sgrz.image  (导入一些小游戏镜像,三台都导入)

image.png

查看是否成功:

image.png

运行:

kubectl run sgrz --image=sgrz:v1 --dry-run=client -oyaml > sgrz.yaml

运行后会出现一个.yaml的包 进入添加一行代码:

image.png

修改后运行:

    kubectl apply -f sgrz.yaml

查看:

image.png

可以curl出来但是访问不到,因为是内网

image.png

用外网运行:

kubectl expose pod sgrz --port=6666 --protocol=TCP --target-port=80 --name=sgrz-svc --type=NodePort

查看:

image.png

访问:

image.png

删除:

image.png

删除后,清理一下缓存,就访问不到了

负载均衡:

kubectl create deployment sgrz-dp --image=sgrz:v1 --replicas=2 --dry-run=client -o yaml > sgrz-dp.yaml

得到.yaml包修改为:

image.png

运行:

image.png

查看:

image.png 如果使用 kubectl delete po (号) 删掉,是删不掉的它会以另一个号重新加入

然后访问:

image.png