Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)

K8S集群部署

一、准备三台服务器
Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)_第1张图片
Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)_第2张图片

通过命令为每一个服务器设置主机名

hostnamectl set-hostname k8s-master

hostnamectl set-hostname k8s-node1

hostnamectl set-hostname k8s-node2
free -m  # 查看分区,需要将SWap全部改成0

# 关闭swap
swapoff -a
sed -ri 's/.*swap.*'/#&/' /etc/fstab

Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)_第3张图片

# 将SELinux设置为permissive模式(相当于将其禁用)
sudo setenforce 0 # 临时禁用
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive' /etc/selinux/config # 永久禁用

# 允许iptables检查桥接流量
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

# 让以上配置生效
sudo sysctl --system

二、为三台服务器安装docker

# 移除以前的docker相关包
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker -latest-logrotate
docker-logrotate docker-engine

# 配置yum源
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 安装docker
sudo yum install -y docker-ce docker-ce-cli containerd.io

# 启动
systemctl enable docker --now

配置阿里云加速
Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)_第4张图片

三、为每台服务器安装kubelet/kubeadm/kubectl

cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http:/mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
	http:/mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
exclude=kubelet kubeadm kubectl
EOF

sudo yum install -y kebelet-1.20.9 kubeadm-1.20.9 kubectl-1.20.9 --disableexcludes=kubernetes

sudo systemctl enable --now kubelet

四、使用kubeadm引导集群

# 下载各个机器需要的镜像
sudo tee ./images.sh <<-'EOF'
#!/bin/bash
images=(
kube-apiserver:v1.20.9
kube-proxy:v1.20.9
kube-controller-manager:v1.20.9
kube-scheduler:v1.20.9
coredns:1.7.0
etcd:3.4.13-0
pause:3.2
)
for imageName in ${images[@]};do
docker pull registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/$imageName
done
EOF

chmod +x ./images/sh && ./images.sh

Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)_第5张图片

在三台服务器的集群中确认主节点

# 所有节点都需要添加master映射
echo "172.31.0.2" cluster-endpoint >> /etc/hosts 

# 使得三个服务器都能通过ping 成功
ping cluster-endpoint


初始化主节点(只在主节点中单独运行)

# 主节点初始化(只在主节点运行)
kubeadm init 
--apiserver-advertise-address=172.31.0.2
--control-plane-endpoint=cluster-endpoint
--image-repository registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images
--kubernetes-version v1.20.9
--service-cidr=10.96.0.0/16
--pod-network-cidr=192.168.0.0/16

然后按照提示进行操作
在这里插入图片描述
在master节点部署网络插件,并根据配置创建资源

Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)_第6张图片

# 查看集群所有节点 (在master节点中操作)
kubectl get nodes

#根据配置文件,给集群创建资源
kubectl apply -f xxx.yaml

#查看集群中部署了哪些应用 (在master节点中操作)
kubectl get pods -A  # 相当于docker ps  运行中的应用在docker中叫容器,在k8s叫pod

Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)_第7张图片

搭建worker节点(将两个节点加入到集群中)
在这里插入图片描述
在这里插入图片描述

在master主节点查看
Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)_第8张图片

五、部署可视化界面dashboard

都在master节点执行:

Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)_第9张图片
如果长时间得不到响应,可以先下载

yum install -y wget  #先安装wget

wget https:raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml

或者直接通过浏览器请求以上路径获取内容,然后添加在yaml文件中
vi dashboard.yaml

kubectl apply -f dashboard.yaml 命令即可创建应用

Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)_第10张图片
Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)_第11张图片
Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)_第12张图片

Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)_第13张图片

在这里插入图片描述
Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)_第14张图片

====================================================================

K8S操作

一、Namespace

名称空间,用来隔离资源:如下所示,开发环境和生产环境在不同的名称空间中
Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)_第15张图片

若不指定名称空间,默认都部署到了default名称空间里
Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)_第16张图片
①、通过命令的方式

kubectl create ns hello #创建hello命名的名称空间

kubectl delete ns hello #删除名称空间

②、通过资源文件的方式

kubectl apply -f hello.yaml 创建资源

apiVersion: v1
kind: Namespace
metadata:
	name: hello

kubectl delete -f hello.yaml 该配置文件下创建的所有资源都被删除

二、Pod

①、通过命令方式创建pod

kubectl run mynginx --image=nginx 

kubectl get pod # 默认是default名称空间下的pod  kubectl get pod -n default
kubectl get pod -owide # 查看更详细的,携带ip
curl 192.168.169.136  #访问nginx应用

kubectl describe pod #查看具体的创建过程(被分配到哪个节点上创建)

kubectl delete pod mynginx # 删除pod

kubectl logs mynginx # 查看pod日志

kubectl exec -it mynginx -- /bin/bash #进入mynginx内部控制台

Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)_第17张图片

②、通过yaml文件创建pod

kubectl apply -f pod.yaml
kubectl delete -f pod.yaml

apiVersion:
kind: Pod
metadata:
	labels:
		run: mynginx
	name: mynginx
	namespace: default  #指定名称空间
spec:
	containers:
	- image: nginx
	- name: mynginx

③、可视化界面中创建

Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)_第18张图片

多种创建方式,如下:
Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)_第19张图片
Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)_第20张图片
Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)_第21张图片

④、pod中多容器

vi multicontainer-pod.yaml

apiVersion: v1
kind: Pod
metadata:
	labels:
		run: myapp
	name: myapp
spec:
	containers:
		-image: nginx
		name: nginx
		-image: tomcat:8.5.68
		name: tomcat

kubectl apply -f multicontainer-pod.yaml

kubectl get pod

Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)_第22张图片

通过命令进行访问:
curl 192.168.36.68:8080
curl 192.168.36.68:80
Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)_第23张图片

三、Deployment
Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)_第24张图片

①、控制pod,使pod拥有自愈能力

kubectl run mynginx --image=nginx #使用该命令创建的pod,删除之后就彻底不存在了

kubectl create deploment mytomcat --image=comcat:8.5.68 #使用该命令创建的pod,删除之后,系统会自动创建一个新的容器(自愈能力)

kubectl get deploy # 查看deploy

kubectl delete mytomcat # 删除部署才能彻底删除pod

②、多副本能力

kubectl create deployment my-dep --image=nginx --replicates=5

Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)_第25张图片

配置文件方式
Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)_第26张图片

③、扩缩容
Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)_第27张图片

watch -n 1 kubectl get pod #每秒监控

kubectl scale deploy/my-dep --replicas=5 #扩容

kubectl scale deploy/my-dep --replicas=2 # 缩容

同理,通过修改配置文件或者图形化界面的方式都可以进行扩容缩容

④、自愈&故障转移

如果pod挂掉,kubernetes会尝试重启,叫做自愈
若pod所在的服务器挂掉,会将该pod转移到其他服务器继续提供服务。

⑤、滚动更新

当对容器进行升级时,其容器内的新版本启动成功后才能提供服务替换旧版本容器,一旦新版本容器启动失败,则依然由旧版本提供服务。

#先查看当前容器的版本
kubectl get deploy my-dep -oyaml
#启动新版本
kubectl set image deployment/my-dev nginx=nginx:1.16.1 --record

kubectl rollout status deployment/my-dev

⑥、版本回退

# 历史记录
kubectl rollout history deployment/my-dep

#查看某个历史详情
kubectl rollout history deployment/my-dep --revision=2

#回滚(回到上次)
kubectl rollout undo deployment/my-dep

#回滚到指定版本
kubectl rollout undo depoyment/my-dep --to--revision=2

四、Service

两种方式访问:集群ipclusterIP和NodePort
Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)_第28张图片
①、使用命令的方式创建对外暴露service

# 集群内任意访问
kubectl expose deploy my-dep --port=8000 --target-port=80

# 查看pod标签
kubectl get pod --show-labels

# 使用标签检索pod
kubectl get pod -l app=my-dep

Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)_第29张图片
当多次访问service暴露的端口ip,可以看到反馈保护不同pod的反馈内容
(负载均衡访问)
Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)_第30张图片

②、使用配置文件的方式
Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)_第31张图片
③、
Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)_第32张图片
Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)_第33张图片

kubectl expose deploy my-dep --port=8000 --target-port=80 --type=ClusterIP #集群内部访问

kubectl expose deploy my-dep --port=8000 --target-port=80 --type=NodePort #集群外也可以访问

NodePort范围30000-32767

通过浏览器访问对应节点的ip:30948即可访问pod服务
Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)_第34张图片

五、Igress
Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)_第35张图片

①、安装Ingress

wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.47.0/deploy/static/provider/baremetal/deploy.yaml

# 修改镜像
vi deploy.yaml
# 将image的值改为如下:
registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/ingress-nginx-controller:v0.46.0

#检查安装环境
kubectl get pod,svc -n ingress-nginx

#最后别忘记把svc暴露的端口要放行

通过NodePort暴露的端口
在这里插入图片描述
在这里插入图片描述
通过yaml进行生成一个如下解构的pod组合
Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)_第36张图片
②、规则制定的yaml文件
多个规则根据配置文件的 - host配置多个 kubectl apply -f ingress.yaml
Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)_第37张图片
生成管理两个域名的规则
Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)_第38张图片
可以通过kubectl edit ing ingress-host-bar修改规则

③、路径重写
Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)_第39张图片
④、流量控制

Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)_第40张图片

六、存储抽象

存储层的技术实现有以下几种:
在这里插入图片描述
以NFS为例:
当某个节点的Pod崩溃,其挂载的数据能够提前在其他节点同步,当在其他节点启用Pod可以立即获得挂载数据。
Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)_第41张图片

①、搭建一个NFS存储的网络结构

# 所有节点安装
yum install -y nfs-utils

# 主节点
echo "/nfs/data/*{insecure,rw,sync,no_root_squash}" > /etc/exports

mkdir -p /nfs/data
systemctl enable rpcbind --now
systemctl enable nfs-server --now
# 配置生效
exports -r
# 查看
exports

# 从节点
showmout -e 10.140.122.4 #(主节点命令 ip -a 获取到)
# 执行以下命令挂载nfs服务器上共享目录到本机路径/root/nfsmout
mkdir -p /nfs/mount
mount -t nfs 10.140.122.4:/nfs/data /nfs/data  #将远程服务目录挂载本机目录

# 返回到主节点进行验证
# 写入一个测试文件(同理在从节点进行修改文件,主节点文件也会相应被修改)
echo "hello nfs server" /nfs/mount/test.txt

Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)_第42张图片

②、原生方式数据挂载
Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)_第43张图片
Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)_第44张图片

③、持久卷PV&持久卷声明PVC

持久卷:将应用需要持久化的数据 保存到指定位置
持久卷声明:生命需要使用持久卷的规格
Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)_第45张图片
静态供应

# nfs主节点
mkdir -p /nfs/data/01
mkdir -p /nfs/data/02
mkdir -p /nfs/data/03

创建持久卷PV(三个不同容量的PV,其文件内容Gi改成小写gi,否则创建失败)

在这里插入图片描述
在这里插入图片描述
Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)_第46张图片
Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)_第47张图片
创建PVC
Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)_第48张图片
创建Pod绑定PVC,系统自动为PVC找到合适大小的pv进行绑定
Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)_第49张图片
直接和申请书绑定
Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)_第50张图片

④、ConfigMap挂载配置文件
Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)_第51张图片

vi redis.conf # 准备一个配置文件  内容:appendonly yes

# 创建一个配置集
kubectl create cm redis-conf --from-file=redis.conf

cubectl get cm # 查看配置集
rm -rf redis.conf # 删除

配置集内容
Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)_第52张图片
精简之后的内容如下:
Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)_第53张图片
启动一个redis镜像的pod,进行挂载
Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)_第54张图片

通过命令kubectl edit cm redis-conf进行修改配置内容

七、Secret

用来保存敏感信息,例如密码、OAuth令牌和SSH密钥
比如从私有仓库中拉去镜像来启动一个pod,需要密码账户权限
在这里插入图片描述
Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)_第55张图片

Kubernetes(K8S)部署安装+K8S操作资源(NameNode/Pod/Deployment/Service/lngress/挂载数据和配置文件/Secret)_第56张图片

你可能感兴趣的:(kubernetes,容器,云原生)