Kubernetes(1)---K8s部署

本文介绍了Kubernetes的基础知识,包括其核心组件和部署步骤。Kubernetes是一个开源的容器管理系统,简化了容器化应用的部署和管理。文章详细阐述了如何禁用节点交换分区、配置Docker、使用kubeadm安装以及安装flannel网络组件,以实现Kubernetes集群的搭建。最后,简要提到了kubectl命令的使用,如create、delete和get等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Kubernetes简介

        kubernetes,简称 K8s,是用 8 代替 8 个字符“ubernete”而成的缩写。是一个开源 的,用于管理云平台中多个主机上的容器化的应用,Kubernetes 的目标是让部署容器化的 应用简单并且高效(powerful),Kubernetes 提供了应用部署,规划,更新,维护的一种机制。

在Docker 作为高级容器引擎快速发展的同时,在Google内部,容器技术已经应用了很多年,Borg系统运行管理着成千上万的容器应用。
Kubernetes项目来源于Borg,可以说是集结了Borg设计思想的精华,并且吸收了Borg系统中的经验和教训。
Kubernetes对计算资源进行了更高层次的抽象,通过将容器进行细致的组合,将最终的应用服务交给用户。

Kubernetes的好处:

  • 隐藏资源管理和错误处理,用户仅需要关注应用的开发。
  • 服务高可用、高可靠。
  • 可将负载运行在由成千上万的机器联合而成的集群中。

Kubernetes的核心组件:

核心组件名称含义
etcd保存了整个集群的状态,一般把所有的集群信息都存放到etcd当中,etcd不属于Kubernetes的某一个部分,而是单独集群部署的,apiserver是它唯一的入口,可以直接访问etcd。
apiServer提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制
Controller Manager是一个控制器,负责维护集群的状态,比如Pod的故障检测、自动扩展、滚动更新等
Scheduler负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上
Kubelet负责维护容器的生命周期,apiserver创建Pod,Scheduler将Pod调度到符合要求的Node节点上,该节点上的Kubelet就会去运行Pod以及Docker,Pod的存储以及网络都是Kubelet进行管理的
Container runtime负责镜像管理以及Pod和容器的真正运行(CRI)
Kube-proxy负责为Service提供cluster内部的服务发现和负载均衡

Kubernetes集群包含有节点代理kubelet和Master组件(APIs, scheduler, etc),一切都基于分布式的存储系统。

二、Kubernetes部署

注意:需要关闭节点的selinux和iptables防火墙,所有节点部署docker引擎。

官网地址:Kubernetes 文档 | Kubernetes

部署参考文档:安装 kubeadm | Kubernetes

清除之前的设置:

[root@server2 ~]# docker stack rm web
[root@server2 ~]# docker service ls
[root@server2 ~]# docker swarm leave --force 
[root@server2 ~]# cd /etc/systemd/system/docker.service.d/
[root@server2 docker.service.d]# ls
[root@server2 docker.service.d]# rm -fr  10-machine.conf 
[root@server2 docker.service.d]# systemctl daemon-reload 
[root@server2 docker.service.d]# systemctl restart docker

[root@server3 ~]# cd /etc/systemd/system/docker.service.d/
[root@server3 docker.service.d]# ls
[root@server3 docker.service.d]# rm -fr 10-machine.conf 
[root@server3 docker.service.d]# systemctl daemon-reload
[root@server3 docker.service.d]# systemctl restart docker

[root@server4 ~]# docker swarm leave

 

禁用每个节点交换分区

[root@server2 ~]# swapoff -a
[root@server2 ~]# vim /etc/fstab 

 配置docker

[root@server2 ~]# cd /etc/docker/
[root@server2 docker]# ls
[root@server2 docker]# vim 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"
}
[root@server2 docker]# systemctl daemon-reload 
[root@server2 docker]# systemctl restart docker
[root@server2 docker]# docker info    ###报错

[root@server2 docker]# cd /etc/docker/
[root@server2 docker]# rm -f *.pem  
[root@server2 docker]# systemctl enable docker.socket       ###enable设置开机自起
[root@server2 docker]# systemctl enable docker.service
[root@server2 docker]# systemctl stop docker.socket     ###先stop再start
[root@server2 docker]# systemctl stop docker
[root@server2 docker]# systemctl start docker.socket 
[root@server2 docker]# systemctl start docker.service 
[root@server2 docker]# docker info
[root@server2 docker]# scp daemon.json server3:/etc/docker/    ###将文件scp到server3和server4上
[root@server2 docker]# scp daemon.json server4:/etc/docker/

 

server3和server4上进行相同操作,禁用swap分区并重启docker和docker.socket

[root@server3 ~]# swapoff -a
[root@server3 ~]# vim /etc/fstab 
[root@server3 ~]# systemctl enable docker.socket 
[root@server3 ~]# systemctl daemon-reload 
[root@server3 ~]# systemctl restart docker
[root@server3 ~]# docker info   ###报错
[root@server3 ~]# systemctl stop docker
[root@server3 ~]# systemctl stop docker.socket 
[root@server3 ~]# systemctl start docker.socket 
[root@server3 ~]# systemctl start docker
[root@server3 ~]# docker info

[root@server4 ~]# swapoff -a
[root@server4 ~]# vim /etc/fstab 
[root@server4 ~]# systemctl  daemon-reload 
[root@server4 ~]# systemctl restart docker
[root@server4 ~]# docker info

 

 

[root@server3 ~]# cd /etc/docker/
[root@server3 docker]# ls
ca.pem  certs.d  daemon.json  key.json  server-key.pem  server.pem
[root@server3 docker]# rm -f *.pem
[root@server3 docker]# ls
certs.d  daemon.json  key.json
[root@server3 docker]# cd /etc/sysctl.d/
[root@server3 sysctl.d]# ls
99-sysctl.conf  docker.conf
[root@server3 sysctl.d]# scp docker.conf server4:/etc/sysctl.d/

[root@server4 ~]# cd /etc/sysctl.d/
[root@server4 sysctl.d]# ls
99-sysctl.conf  docker.conf
[root@server4 sysctl.d]# sysctl --system

 镜像配置并安装部署软件kubeadm

[root@server2 yum.repos.d]# vim k8s.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
[root@server2 yum.repos.d]# scp k8s.repo server3:/etc/yum.repos.d/  
[root@server2 yum.repos.d]# scp k8s.repo server4:/etc/yum.repos.d/
[root@server2 yum.repos.d]# yum install -y kubeadm kubelet kubectl  ##每个节点都安装
[root@server2 yum.repos.d]# systemctl enable --now kubelet
Created symlink from /etc/systemd/system/multi-user.target.wants/kubelet.service to /usr/lib/systemd/system/kubelet.service.
[root@server2 yum.repos.d]# ssh-keygen 
[root@server2 yum.repos.d]# ssh-copy-id server3
[root@server2 yum.repos.d]# ssh-copy-id server4
[root@server2 yum.repos.d]# ssh server3 systemctl enable --now kubelet   
[root@server2 yum.repos.d]# ssh server4 systemctl enable --now kubelet 
[root@server2 yum.repos.d]# kubeadm config print init-defaults

 配置镜像:

 下载kubeadm kubelet kubectl

server2、3、4之间设置免密:

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

  将server1设置为仓库,harbor中建立项目k8s:

 列出所需的镜像,并拉取: 

[root@server2 ~]# kubeadm config images list --image-repository registry.aliyuncs.com/google_containers
[root@server2 ~]# kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers

[root@server2 ~]# docker login reg.westos.org
Username: admin
Password: 

 awk命令上传到本地仓库

[root@server2 ~]# docker images |grep registry | awk '{print $1":"$2}' | awk -F/ '{system("docker tag "$0" reg.westos.org/k8s/"$3"")}'
[root@server2 ~]# docker images |grep k8s
[root@server2 ~]# docker images |grep k8s | awk '{system("docker push "$1":"$2"")}'

  在仓库中查看一下镜像是否上传成功:

 初始化:

[root@server2 ~]# kubeadm config images list --image-repository reg.westos.org/k8s
[root@server2 ~]# kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository reg.westos.org/k8s    ##初始化集群
[root@server2 ~]# export KUBECONFIG=/etc/kubernetes/admin.conf
[root@server2 ~]# vim .bash_profile 

export KUBECONFIG=/etc/kubernetes/admin.conf

  安装flannel网络组件

在harbor仓库新建项目

 下载kube-flannel.yml文件,查看所需镜像并上传到私有仓库

[root@server2 ~]# docker pull rancher/mirrored-flannelcni-flannel-cni-plugin:v1.0.1
[root@server2 ~]# docker pull rancher/mirrored-flannelcni-flannel:v0.17.0
[root@server2 ~]# docker tag rancher/mirrored-flannelcni-flannel-cni-plugin:v1.0.1 reg.westos.org/rancher/mirrored-flannelcni-flannel-cni-plugin:v1.0.1
[root@server2 ~]# docker push reg.westos.org/rancher/mirrored-flannelcni-flannel-cni-plugin:v1.0.1
[root@server2 ~]# docker tag rancher/mirrored-flannelcni-flannel:v0.17.0 reg.westos.org/rancher/mirrored-flannelcni-flannel:v0.17.0
[root@server2 ~]# docker push reg.westos.org/rancher/mirrored-flannelcni-flannel:v0.17.0

 应用网络组件

[root@server2 ~]# kubectl apply -f kube-flannel.yml 

 网络pod已经生效

  补齐命令功能

[root@server2 ~]# echo "source <(kubectl completion bash)" >> ~/.bashrc    ###配置kubectl命令补齐功能
[root@server2 ~]# source .bashrc 

将server3和4加入集群:

之前集群初始化时有加入集群的token令牌和hash值,若token和hash丢失,可以用命令找回

[root@server2 ~]# kubeadm token list     ###找回token

[root@server2 ~]# openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | \
>    openssl dgst -sha256 -hex | sed 's/^.* //'        ###找回hash

 加入集群命令格式:

kubeadm join --token <token> <control-plane-host>:<control-plane-port> --discovery-token-ca-cert-hash sha256:<hash>

 在server3和server4上执行join命令,加入集群

[root@server3 ~]# kubeadm join 172.25.70.2:6443 --token va15g5.pol3hznkk080g1o7 \
> --discovery-token-ca-cert-hash sha256:c21863724e5cc80da299a52c9053411c792f49c71780d36bb81f0001c69b68f9

[root@server4 ~]# kubeadm join 172.25.70.2:6443 --token va15g5.pol3hznkk080g1o7  --discovery-token-ca-cert-hash sha256:c21863724e5cc80da299a52c9053411c792f49c71780d36bb81f0001c69b68f9

 

 kubectl命令

kubectl命令指南:Kubectl Reference Docs

create 命令:根据文件或者输入来创建资源

# 创建Deployment和Service资源
$ kubectl create -f demo-deployment.yaml
$ kubectl create -f demo-service.yaml

 delete 命令:删除资源

# 根据yaml文件删除对应的资源,但是yaml文件并不会被删除,这样更加高效
$ kubectl delete -f demo-deployment.yaml 
$ kubectl delete -f demo-service.yaml
 
# 也可以通过具体的资源名称来进行删除,使用这个删除资源,同时删除deployment和service资源
$ kubectl delete 具体的资源名称

get 命令 :获得资源信息

$ kubectl get all    ## 查看所有的资源信息
$ kubectl get --all-namespaces
$ kubectl get pod  # 查看pod列表
$ kubectl get pod --show-labels   # 显示pod节点的标签信息
$ kubectl get pods -l app=example  # 根据指定标签匹配到具体的pod
$ kubectl get node  # 查看node节点列表
$ kubectl get node --show-labels  # 显示node节点的标签信息
$ kubectl get pod -o wide  # 查看pod详细信息,也就是可以查看pod具体运行在哪个节点上(ip地址信息)
$ kubectl get svc  ## 查看服务的详细信息,显示了服务名称,类型,集群ip,端口,时间等信息
$ kubectl get svc -n kube-system

$ kubectl get ns    ## 查看命名空间
$ kubectl get namespaces
$ kubectl get pod --all-namespaces  # 查看所有pod所属的命名空间
$ kubectl get pod --all-namespaces  -o wide  # 查看所有pod所属的命名空间并且查看都在哪些节点上运行
$ kubectl get rs  ##查看目前所有的replica set,显示了所有的pod的副本数,以及他们的可用数量以及状态等信息 
查看已经部署了的所有应用,可以看到容器,以及容器所用的镜像,标签等信息:
$ kubectl get deploy -o wide
$ kubectl get deployments -o wide
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值