企业部分实战---Kubernetes的安装和部署及pod管理

一、什么是Kubernetes?

Kubernetes是一个可移植的,可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。它拥有一个庞大且快速增长的生态系统。Kubernetes的服务,支持和工具广泛可用。

  • Kubernetes组件
    Kubernetes集群由代表控制平面的组件和一组称为节点的机器组成。

  • Kubernetes项目来源于Borg,可以说是集结了Borg设计思想的精华,并且吸收了Borg系统中的经验和教训。

  • Kubernetes对计算资源进行了更高层次的抽象,通过将容器进行细致的组合,将最终的应用服务交给用户。

  • Kubernetes的好处:

  1. 隐藏资源管理和错误处理,用户仅需要关注应用的开发。
  2. 服务高可用、高可靠。
  3. 可将负载运行在由成千上万的机器联合而成的集群中。
  • kubernetes设计架构
    Kubernetes集群包含有节点代理kubelet和Master组件(APIs, scheduler, etc),一切都基于分布式的存储系统。
    在这里插入图片描述
  • Kubernetes主要由以下几个核心组件组成:
  1. etcd:保存了整个集群的状态
  2. apiserver:提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制
  3. controller manager:负责维护集群的状态,比如故障检测、自动扩展、滚动更新等
  4. scheduler:负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上
  5. kubelet:负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理
  6. Container runtime:负责镜像管理以及Pod和容器的真正运行(CRI)
  7. kube-proxy:负责为Service提供cluster内部的服务发现和负载均衡
  • 除了核心组件,还有一些推荐的Add-ons:
  1. kube-dns:负责为整个集群提供DNS服务
  2. Ingress Controller:为服务提供外网入口
  3. Heapster:提供资源监控
  4. Dashboard:提供GUI
  5. Federation:提供跨可用区的集群
  6. Fluentd-elasticsearch:提供集群日志采集、存储与查询

二、Kubernetes部署

主节点:server1 172.25.21.1 (master)
子节点:server2 172.25.21. 2 (slave)
子节点:server3 172.25.21.3 (slave)
仓库: server9 172.25.21.9

  1. 关闭节点的selinux和iptables防火墙
    在这里插入图片描述

  2. 所有节点部署docker引擎
    vim /etc/yum.repos.d/docker-ce.repo

[docker]
name=added from: http://172.25.21.250/docker-ce
baseurl=http://172.25.21.250/docker-ce
gpgcheck=0

[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
yum install -y docker-ce docke-ce-cli

在这里插入图片描述

vim /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1

sysctl --system
在这里插入图片描述
启动docker
systemctl enable --now docker

vim /etc/docker/daemon.json

{
  "registry-mirrors": ["https://reg.westos.org"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ]
}

重启docker
mkdir -p /etc/systemd/system/docker.service.d
systemctl daemon-reload
systemctl restart docker

  • 禁用swap分区:
  • swapoff -a
  • 注释掉/etc/fstab文件中的swap定义
    在这里插入图片描述
    安装部署软件kubeadm:
yum install -y kubelet kubeadm kubectl

systemctl enable --now kubelet

kubeadm config print init-defaults  //查看默认配置信息

默认从k8s.gcr.io上下载组件镜像,需要翻墙才可以,所以需要修改镜像仓库:
kubeadm config images list --image-repository registry.aliyuncs.com/google_containers //列出所需镜像

kubeadm config images pull --image-repository
registry.aliyuncs.com/google_containers //拉取镜像

在这里插入图片描述
在这里插入图片描述
初始化集群并拉取网络插件

kubeadm init --pod-networkcidr=10.244.0.0/16 --image-repository
registry.aliyuncs.com/google_containers//初始化集群

安装flannel网件:https://github.com/coreos/flannel

kubectl apply -f  https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

--pod-network-cidr=10.244.0.0/16 //使用flannel网络组件时必须添加
--kubernetes-version   //指定k8s安装版本

将初始化集群后获得的token,复制到子节点,进行节点扩容


节点扩容:

kubeadm join 172.25.21.1:6443 --token qmocqu.ry5wxb6p1wop5axg    --discovery-token-ca-cert-hash sha256:ab03342b8fc427a268144438d575748de840c83f13df72d855da7daba1b52de6 

配置kubectl

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

配置kubectl命令补齐功能:
echo "source <(kubectl completion bash)" >> ~/.bashrc

source ~/.bashrc

在这里插入图片描述

到这里Kubernetes部署已完成,可用以下命令来查看它是否部署成功

kubectl get cs
kubectl get node
kubectl get pod -n kube-system

在这里插入图片描述

三、pod 管理

Pod是可以创建和管理Kubernetes计算的最小可部署单元,一个Pod代表着集群中运行的一个进程,每个pod都有一个唯一的ip。
一个pod类似一个豌豆荚,包含一个或多个容器(通常是docker),多个容器间共享IPC、Network和UTC namespace。
1.配置每个节点的私有仓库,及每个节点都有证书
在server2与server3上:
vim /etc/docker/daemon.json

{
  "registry-mirrors": ["https://reg.westos.org"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ]
}

systemctl restart docker重启docker引擎

确保每个节点都有证书
在这里插入图片描述
2.创建自主式pod

创建Pod应用
kubectl run nginx --image=nginx --replicas=2 --record
在这里插入图片描述
集群内部任意节点可以访问Pod,但集群外部无法直接访问。
在这里插入图片描述
在这里插入图片描述
删除Pod
在这里插入图片描述
3. 使用控制器部署pod+删除pod
kubectl create deployment myapp --image=nginx使用控制器部署pod
kubectl delete pod myapp-687598b8b4-ch84w删除pod
kubectl delete deployment.apps myapp彻底删除

在这里插入图片描述
在这里插入图片描述
4.Pod扩容与缩容
kubectl create deployment myapp --image=nginx
kubectl scale deployment myapp --replicas=2
kubectl scale deployment myapp --replicas=5手动扩容
kubectl scale deployment myapp --replicas=2手动缩容

在这里插入图片描述
在这里插入图片描述

5.service设定
service是一个抽象概念,定义了一个服务的多个pod逻辑合集和访问pod的策略, 一般把service称为微服务。
创建service:
kubectl expose deployment nginx --port=80 --target-port=80 此时pod客户端可以通过service的名称访问后端的两个Pod
ClusterIP: 默认类型,自动分配一个仅集群内部可以访问的虚拟IP

kubectl expose deployment myapp --port=80 --target-port=80暴露端口
kubectl get svc查看service
kubectl describe svc myapp
kubectl get pod -o wide
kubectl get pod --show-labels
在这里插入图片描述
在这里插入图片描述
6.pod镜像更新和回滚
更新pod镜像 kubectl set image deployments myapp nginx=myapp:v1 --record
在这里插入图片描述

查看历史版本 kubectl rollout history deployment nginx
在这里插入图片描述
在这里插入图片描述

回滚版本 kubectl rollout undo deployment myapp --to-revision=2
在这里插入图片描述
7. 使用NodePort类型暴露端口,让外部客户端访问Pod

kubectl edit svc myapp 修改service的type为NodePort
在这里插入图片描述

kubectl expose deployment nginx --port=80 --target-port=80 -type=NodePort 也可以在创建service时指定类型

在这里插入图片描述
NodePort: 在ClusterIP基础上为Service在每台机器上绑定一个端口,这样就可以通过NodeIP:NodePort 来访问该服务,外部节点就可以访问了

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值