进行容器化应用部署
利于应用扩展
让部署容器化应用更加简洁和高效
二、功能1.自动装箱
2.自我修复:当容器失败时,会对容器进行重启;当所部署的 Node 节点有问题时,会对容器进行重新部署和重新调度;当容器未通过监控检查时,会关闭此容器直到容器正常运行时,才会对外提供
3.水平扩展
4.服务发现
5.滚动更新
6.版本回退
7.密匙和配置管理
8.存储编排
9.批处理
三、集群架构组件(Master(主控节点)和node(工作节点)) master组件api server:集群统一入口,以restful风格,交给etcd存储
scheduler:节点调度选择node节点应用部署
controller-manager:处理集群中常规后台任务,一个资源对应一个控制器
etcd:存储系统,用于保存集群相关的数据
node组件kubeelet:master派到node节点代表,管理本机容器
kube-proxy:提供网络代理,实现负载均衡
四、k8s核心概念1.pod:最小的部署单元;一组容器的集合;共享网络;生命周期是短暂的重启服务器会变
2.controller:确保预期pod副本数量;无状态应用部署(没有约定,随便使用);有状态应用部署(依赖存储,网络ip唯一);确保所有的node运行同一个pod;一次性任务和定时任务
3.service:定义一组pod的访问规则
五、搭建k8s 搭建k8s环境平台规划:单master集群:master挂掉就不能用了
多master集群:高可用
服务器硬件配置要求测试环境:master(2核 4g 20g) node(4核 8g 40g)
搭建集群方式:kubeadm,二进制包 kubeadm方式1.创建一个master节点, kubeadm init
2.将node节点加入到当前集群 kubeadm join
步骤:
# 关闭防火墙
systemctl stop firewalld systemctl disable firewalld# 关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久 /usr/sbin/sestatus -v 查看是否关闭# 关闭swap
swapoff -a # 临时 sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久 free 查看是否关闭 都是0就是关闭# 根据规划设置主机名
hostnamectl set-hostname# 在master添加hosts
cat >> /etc/hosts << EOF 192.168.198.132 k8smaster 192.168.198.131 k8snode1 192.168.198.130 k8snode2 EOF# 将桥接的IPv4流量传递到iptables的链
cat > /etc/sysctl.d/k8s.conf << EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sysctl --system # 生效# 时间同步
yum install ntpdate -y ntpdate time.windows.com
Kubernetes默认CRI(容器运行时)为Docker,因此先安装Docker。
卸载旧版本
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine安装所需的软件包。yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。
sudo yum install -y yum-utils device-mapper-persistent-data lvm2设置仓库
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo安装 Docker Engine-Community
sudo yum install docker-ce docker-ce-cli containerd.io镜像加速
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://xenbpy66.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker查看docker启动状态
systemctl status docker开机自动启动docker
sudo systemctl enable docker配置一下yum的k8s软件源
cat > /etc/yum.repos.d/kubernetes.repo << EOF [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF安装kubeadm,kubelet和kubectl
yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0# 设置开机启动
部署Kubernetes Master【master节点】
在master下执行
kubeadm init --apiserver-advertise-address=192.168.198.132 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.18.0 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16使用kubectl工具:
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config查看正在运行的节点
kubectl get nodes向集群添加新节点,执行在kubeadm init输出的kubeadm join命令在node节点执行:
kubeadm join 192.168.198.132:6443 --token 3ve4j2.h1uwpk22ln8fbxmx --discovery-token-ca-cert-hash sha256:187fe176e425bebc0ee7e27b5ddb3ff8cae5a61a9dca280f16a0c9b5e308188d默认token有效期为24小时,当过期之后,该token就不可用了。这时就需要重新创建token, *** 作如下:
kubeadm token create --print-join-command
部署CNI网络插件
wget https://raw.githubusercontent.com/coreos/flannel/master/documentation/kube-flannel.yml默认镜像地址无法访问,sed命令修改为docker hub镜像仓库。
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/documentation/kube-flannel.yml #查看状态 【kube-system是k8s中的最小单元】 kubectl get pods -n kube-system
测试kubernetes集群
# 下载nginx 【会联网拉取nginx镜像】 kubectl create deployment nginx --image=nginx # 暴露端口 kubectl expose deployment nginx --port=80 --type=NodePort # 查看一下对外的端口 kubectl get pod,svc # 查看状态 kubectl get pod
访问
六、kubernetes 集群命令行工具 kubectl 语法kubectl [command] [TYPE] [NAME]
command:指定要对资源执行的 *** 作比如create、get、delete
TYPE:指定资源类型,是大小写敏感的,
NAME:指定资源名称,是大小写敏感的,如果省略名称会显示所有的资源
kubectl --help:帮助命令
快速编写yaml文件使用kubectl create命令生成
kubectl create deployment web --image=nginx -o yaml --dry-run > my1.yam
kubectl get命令导出yaml文件
kubectl get deploy nginx -o=yaml --export > my2.yaml七、Pod 概念
1.最小部署的单元
2.不会直接处理容器,而是Pod,包含多个容器(一组容器的集合)
3.一个Pod中的容器共享网络命名空间
Pod存在的意义1.创建容器使用docker,一个docker对应一个容器,一个容器有进程,一个容器运行一个应用程序
2.Pod是多进程设计,运行多个应用程序 一个Pod有多个容器一个容器里面运行一个应用程序
3.Pod为了亲密性应用:俩个应用之间进行交互、网络之间的调用、俩个应用需要频繁调用
实现机制共享网络:
首先创建Paus根容器,把其他业务容器加入到Pause容器里面,让所有业务容器在同一个名称空间中,可以实现网络的通信
共享存储:
pod持久化数据(Volumes数据卷):日志数据,业务数据等;使用数据卷来进行持久化存储
镜像拉取策略 Pod资源限制 Pod重启策略 Pod健康检查容器检查
java堆内存溢出进程还在但是不能提供服务
应用层面健康检查
创建流程master节点
创建pod先进入到api server进行 *** 作把相关信息存储到etcd中,
scheduler先到api server监听到有没有新的pod创建,通过etcd读取创建的pod根据调度算法分配到某个node节点中返回给api server
node节点
kubelet访问api server读取etcd拿到分配给当前节点的pod通过docker创建容器把这些在状态返回给api server
影响pod调度的属性1.Pod资源限制对Pos调用产生影响:根据request找到足够的node节点进行调度
2.节点选择器标签:
首先要对节点创建标签
kubectl label node k8snode1 env_role=dev #查看 kubectl get nodes k8snode1 --show-labels
3.节点的亲和性(nodeAffinity)
硬亲和性:约束条件必须满足
软亲和性:尝试满足,不保证
常用 *** 作符:In NotIn Exists Gt Lt DoesNotExists
污点和污点容忍Taint污点:节点不做普通分配调度,是节点属性
场景:
专用节点
配置特点硬件节点
基于Taint驱逐
八、controller(在集群上管理和运行容器的对象)(1)查看节点污点情况
kubectl describe node k8smaster | grep Taint污点值有三个:
NoSchedule:一定不被调度
PreferNoSchedule:尽量不被调度
NoExecute:不会调度并且还会驱逐node已有的的Pod
(2)为节点添加污点
kubectl taint node [node节点名称] key=value:污点三个值(3)删除污点
kubectl taint node k8snode1 env_role:NoSchedule-node/k8snode1 untainted
Pod是通过controller实现应用的运维比如伸缩,滚动升级等,Pod和controller是通过label,selector标签来建立联系的
deployment应用场景:
部署无状态应用(web服务,微服务),
管理PodheReplicaSet,
部署滚动升级
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)