第64篇 Kubernetes的简单介绍

打印 上一主题 下一主题

主题 949|帖子 949|积分 2847

1.什么是Kubernetes

Kubernetes是⼀个开源的容器编排引擎,可以⽤来管理容器化的应⽤,包括容器的⾃动化的摆设、扩容、缩容、升级、回滚等等,它是Google在2014年开源的⼀个项⽬,它的前身是Google内部的Borg体系。
2.为什么要使用Kubernetes

在Kubernetes出现之前,我们⼀般都是使⽤Docker来管理容器化的应⽤,但是Docker只是⼀个单机的容器管理⼯具,它只能管理单个节点上的容器,当我们的应⽤步伐需要运⾏在多个节点上的时间,就需要使⽤⼀些其他的⼯具来管理这些节点,⽐如Docker Swarm、Mesos、Kubernetes等等,这些⼯具都是容器编排引擎,它们可以⽤来管理多个节点上的容器,但是它们之间也有⼀些区别,⽐如Docker Swarm是Docker官⽅提供的⼀个容器编排引擎,它的功能⽐较简单,适合于⼀些⼩型的、简单的场景,⽽Mesos和Kubernetes则是⽐较复杂的容器编排引擎,Mesos是Apache基⾦会的⼀个开源项⽬,⽽Kubernetes是Google在2014年开源的,⽬前已经成为了CNCF(Cloud Native Computing Foundation)的⼀个顶级项⽬,基本上已经成为了容器编排引擎的事实尺度了。
3.使⽤minikube搭建kubernetes集群环境

minikube是⼀个轻量级的kubernetes集群环境,
可以⽤来在本地快速搭建⼀个单节点的kubernetes集群,
3.1 安装minikube

minikube的安装:
  1. # macOS
  2. brew install minikube
  3. # Windows
  4. choco install minikube
  5. # Linux
  6. curl -LO
  7. https://storage.googleapis.com/minikube/releases/latest/minikubelinux-amd64
  8. sudo install minikube-linux-amd64 /usr/local/bin/minikube
复制代码
也可以到官⽹直接下载安装包来安装:https://minikube.sigs.k8s.io/docs/start/
3.2 启动minikube
  1. # 启动minikube
  2. minikube start
复制代码
4.使⽤Multipass和k3s搭建kubernetes集群环境

minikube只能⽤来在本地搭建⼀个单节点的kubernetes集群环境,
下⾯介绍如何使⽤Multipass和k3s来搭建⼀个多节点的kubernetes集群环境,
4.1 Multipass介绍

Multipass是⼀个轻量级的虚拟机管理⼯具,
可以⽤来在本地快速创建和管理虚拟机,
相⽐于VirtualBox或者VMware如许的虚拟机管理⼯具,
Multipass更加轻量快速,
⽽且它还提供了⼀些命令⾏⼯具来⽅便我们管理虚拟机。
官⽅⽹址: https://Multipass.run/
4.1.1 安装Multipass
  1. # macOS
  2. brew install multipass
  3. # Windows
  4. choco install multipass
  5. # Linux
  6. sudo snap install multipass
复制代码
4.1.2 Multipass常⽤命令

关于Multipass的⼀些常⽤命令我们可以通过 multipass help 来查看,
这⾥⼤家只需要记着⼏个常⽤的命令就可以了,
  1. # 查看帮助
  2. multipass help
  3. multipass help <command>
  4. # 创建⼀个名字叫做k3s的虚拟机
  5. multipass launch --name k3s
  6. # 在虚拟机中执⾏命令
  7. multipass exec k3s -- ls -l
  8. # 进⼊虚拟机并执⾏shell
  9. multipass shell k3s
  10. # 查看虚拟机的信息
  11. multipass info k3s
  12. # 停⽌虚拟机
  13. multipass stop k3s
  14. # 启动虚拟机
  15. multipass start k3s
  16. # 删除虚拟机
  17. multipass delete k3s
  18. # 清理虚拟机
  19. multipass purge
  20. # 查看虚拟机列表
  21. multipass list
  22. # 挂载⽬录(将本地的~/kubernetes/master⽬录挂载到虚拟机中的~/master⽬录)
  23. multipass mount ~/kubernetes/master master:~/master
复制代码
Multipass有个问题,每次M1芯⽚的Mac升级之后Multipass的虚拟机都会被删除,不知道⼤家有没有碰到类似的问题。
  1. # 镜像位置
  2. /var/root/Library/Application Support/multipassd/qemu/vault/instances
  3. # 配置⽂件
  4. /var/root/Library/Application Support/multipassd/qemu/multipassd-vminstances.json
复制代码
4.2 k3s介绍

k3s 是⼀个轻量级的Kubernetes发⾏版,它是 Rancher Labs 推出的⼀个开源项⽬,
旨在简化Kubernetes的安装和维护,同时它照旧CNCF认证的Kubernetes发⾏版。
4.2.1 创建和设置master节点

⾸先我们需要使⽤multipass创建⼀个名字叫做k3s的虚拟机,
  1. multipass launch --name k3s --cpus 2 --memory 8G --disk 10G
复制代码
虚拟机创建完成之后,可以设置SSH密钥登录,不过这⼀步并不是必须的,
即使不设置也可以通过 multipass exec 或者 multipass shell 命令来进⼊虚拟机,然后我们需要在master节点上安装k3s,
使⽤k3s搭建kubernetes集群⾮常简单,只需要执⾏⼀条命令就可以在当前节点上安装k3s,打开刚刚创建的k3s虚拟机,执⾏下⾯的命令就可以安装⼀个k3s的master节点,
  1. # 安装k3s的master节点
  2. curl -sfL https://get.k3s.io | sh -
复制代码
国内⽤户可以换成下⾯的命令,使⽤ranher的镜像源来安装:
  1. curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh |
  2. INSTALL_K3S_MIRROR=cn sh -
复制代码
安装完成之后,可以通过 kubectl 命令来查看集群的状态,
  1. sudo kubectl get nodes
复制代码
4.2.2 创建和设置worker节点

接下来需要在这个master节点上获取⼀个token,⽤来作为创建worker节点时的⼀个认证凭证,
它生存在 /var/lib/rancher/k3s/server/node-token 这个⽂件⾥⾯,我们可以使⽤ sudo cat 命令来查看⼀下这个⽂件中的内容,
  1. sudo cat /var/lib/rancher/k3s/server/node-token
复制代码
将TOKEN生存到⼀个环境变量中
  1. TOKEN=$(multipass exec k3s sudo cat /var/lib/rancher/k3s/server/nodetoken)
复制代码
生存master节点的IP地址
  1. MASTER_IP=$(multipass info k3s | grep IPv4 | awk '{print $2}')
复制代码
确认:
  1. echo $MASTER_IP
复制代码
使⽤刚刚的 TOKEN 和 MASTER_IP 来创建两个worker节点并把它们加⼊到集群中
  1. # 创建两个worker节点的虚拟机
  2. multipass launch --name worker1 --cpus 2 --memory 8G --disk 10G
  3. multipass launch --name worker2 --cpus 2 --memory 8G --disk 10G
  4. # 在worker节点虚拟机上安装k3s
  5. for f in 1 2; do
  6. multipass exec worker$f -- bash -c "curl -sfL https://ranchermirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn
  7. K3S_URL="https://$MASTER_IP:6443" K3S_TOKEN="$TOKEN" sh -"
  8. done
复制代码
如许就完成了⼀个多节点的kubernetes集群的搭建。
5.在线实验环境

Killercoda
Play-With-K8s
6.kubectl常⽤命令

6.1 基础使用
  1. # 查看帮助
  2. kubectl --help
  3. # 查看API版本
  4. kubectl api-versions
  5. # 查看集群信息
  6. kubectl cluster-info
复制代码
6.2 资源的创建和运行
  1. # 创建并运⾏⼀个指定的镜像
  2. kubectl run NAME --image=image [params...]
  3. # e.g. 创建并运⾏⼀个名字为nginx的Pod
  4. kubectl run nginx --image=nginx
  5. # 根据YAML配置⽂件或者标准输⼊创建资源
  6. kubectl create RESOURCE
  7. # e.g.
  8. # 根据nginx.yaml配置⽂件创建资源
  9. kubectl create -f nginx.yaml
  10. # 根据URL创建资源
  11. kubectl create -f https://k8s.io/examples/application/deployment.yaml
  12. # 根据⽬录下的所有配置⽂件创建资源
  13. kubectl create -f ./dir
  14. # 通过⽂件名或标准输⼊配置资源
  15. kubectl apply -f (-k DIRECTORY | -f FILENAME | stdin)
  16. # e.g.
  17. # 根据nginx.yaml配置⽂件创建资源
  18. kubectl apply -f nginx.yaml
复制代码
6.3 查看资源信息
  1. # 查看集群中某⼀类型的资源
  2. kubectl get RESOURCE
  3. # 其中,RESOURCE可以是以下类型:
  4. kubectl get pods / po # 查看Pod
  5. kubectl get svc # 查看Service
  6. kubectl get deploy # 查看Deployment
  7. kubectl get rs # 查看ReplicaSet
  8. kubectl get cm # 查看ConfigMap
  9. kubectl get secret # 查看Secret
  10. kubectl get ing # 查看Ingress
  11. kubectl get pv # 查看PersistentVolume
  12. kubectl get pvc # 查看PersistentVolumeClaim
  13. kubectl get ns # 查看Namespace
  14. kubectl get node # 查看Node
  15. kubectl get all # 查看所有资源
  16. # 后⾯还可以加上 -o wide 参数来查看更多信息
  17. kubectl get pods -o wide
  18. # 查看某⼀类型资源的详细信息
  19. kubectl describe RESOURCE NAME
  20. # e.g. 查看名字为nginx的Pod的详细信息
  21. kubectl describe pod nginx
复制代码
6.4 资源的修改、删除和清理
  1. # 更新某个资源的标签
  2. kubectl label RESOURCE NAME KEY_1=VALUE_1 ... KEY_N=VALUE_N
  3. # e.g. 更新名字为nginx的Pod的标签
  4. kubectl label pod nginx app=nginx
  5. # 删除某个资源
  6. kubectl delete RESOURCE NAME
  7. # e.g. 删除名字为nginx的Pod
  8. kubectl delete pod nginx
  9. # 删除某个资源的所有实例
  10. kubectl delete RESOURCE --all
  11. # e.g. 删除所有Pod
  12. kubectl delete pod --all
  13. # 根据YAML配置⽂件删除资源
  14. kubectl delete -f FILENAME
  15. # e.g. 根据nginx.yaml配置⽂件删除资源
  16. kubectl delete -f nginx.yaml
  17. # 设置某个资源的副本数
  18. kubectl scale --replicas=COUNT RESOURCE NAME
  19. # e.g. 设置名字为nginx的Deployment的副本数为3
  20. kubectl scale --replicas=3 deployment/nginx
  21. # 根据配置⽂件或者标准输⼊替换某个资源
  22. kubectl replace -f FILENAME
  23. # e.g. 根据nginx.yaml配置⽂件替换名字为nginx的Deployment
  24. kubectl replace -f nginx.yaml
复制代码
6.5 调试和交互
  1. # 进⼊某个Pod的容器中
  2. kubectl exec [-it] POD [-c CONTAINER] -- COMMAND [args...]
  3. # e.g. 进⼊名字为nginx的Pod的容器中,并执⾏/bin/bash命令
  4. kubectl exec -it nginx -- /bin/bash
  5. # 查看某个Pod的⽇志
  6. kubectl logs [-f] [-p] [-c CONTAINER] POD [-n NAMESPACE]
  7. # e.g. 查看名字为nginx的Pod的⽇志
  8. kubectl logs nginx
  9. # 将某个Pod的端⼝转发到本地
  10. kubectl port-forward POD [LOCAL_PORT:]REMOTE_PORT [...
  11. [LOCAL_PORT_N:]REMOTE_PORT_N]
  12. # e.g. 将名字为nginx的Pod的80端⼝转发到本地的8080端⼝
  13. kubectl port-forward nginx 8080:80
  14. # 连接到现有的某个Pod(将某个Pod的标准输⼊输出转发到本地)
  15. kubectl attach POD -c CONTAINER
  16. # e.g. 将名字为nginx的Pod的标准输⼊输出转发到本地
  17. kubectl attach nginx
  18. # 运⾏某个Pod的命令
  19. kubectl run NAME --image=image -- COMMAND [args...]
  20. # e.g. 运⾏名字为nginx的Pod
  21. kubectl run nginx --image=nginx -- /bin/bash
复制代码
7.Portainer的安装和使⽤

Portainer 是⼀个轻量级的容器管理⼯具,
可以⽤来管理Docker和Kubernetes,
它提供了⼀个Web界⾯来⽅便我们管理容器,
官⽅⽹址: https://www.portainer.io/
7.1  安装Portainer
  1. # 创建⼀个名字叫做portainer的虚拟机
  2. multipass launch --name portainer --cpus 2 --memory 8G --disk 10G
复制代码
当然也可以直接安装在我们刚刚创建的master节点上,
  1. # 在master节点上安装portainer,并将其暴露在NodePort 30777上
  2. kubectl apply -n portainer -f https://downloads.portainer.io/ce2-
  3. 19/portainer.yaml
复制代码
或者使⽤Helm安装
  1. # 使⽤Helm安装Portainer
  2. helm upgrade --install --create-namespace -n portainer portainer
  3. portainer/portainer --set tls.force=true
复制代码
然后直接访问 https://localhost:30779/ 或者 http://localhost:30777/ 就可以了,
8.Helm的安装和使⽤

Helm 是⼀个Kubernetes的包管理⼯具,
可以⽤来管理Kubernetes的应⽤,
它提供了⼀个命令⾏⼯具来⽅便我们管理Kubernetes的应⽤,
官⽅⽹址: https://helm.sh/
8.1 安装Helm

使⽤包管理器安装:
  1. # macOS
  2. brew install helm
  3. # Windows
  4. choco install kubernetes-helm
  5. # 或者
  6. scoop install helm
  7. # Linux(Debian/Ubuntu)
  8. curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | sudo tee
  9. /usr/share/keyrings/helm.gpg > /dev/null
  10. sudo apt-get install apt-transport-https --yes
  11. echo "deb [arch=$(dpkg --print-architecture) signedby=/usr/share/keyrings/helm.gpg]
  12. https://baltocdn.com/helm/stable/debian/ all main" | sudo tee
  13. /etc/apt/sources.list.d/helm-stable-debian.list
  14. sudo apt-get update
  15. sudo apt-get install helm
  16. # Linux(CentOS/Fedora)
  17. sudo dnf install helm
  18. # Linux(Snap)
  19. sudo snap install helm --classic
  20. # Linux(FreeBSD)
  21. pkg install helm
复制代码
使⽤脚本安装
  1. $ curl -fsSL -o get_helm.sh
  2. https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
  3. $ chmod 700 get_helm.sh
  4. $ ./get_helm.sh
复制代码
或者
  1. curl https://raw.githubusercontent.com/helm/helm/main/scripts/gethelm-3 | bash
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

小秦哥

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表