你好云原生
本文提供给k8s的初学者了解其中的一些基本概念
你好云原生
作用
传统部署时代
早期,各个组织是在物理服务器上运行应用程序。 由于无法限制在物理服务器中运行的应用程序资源使用,因此会导致资源分配问题。 例如,如果在同一台物理服务器上运行多个应用程序, 则可能会出现一个应用程序占用大部分资源的情况,而导致其他应用程序的性能下降。 一种解决方案是将每个应用程序都运行在不同的物理服务器上, 但是当某个应用程式资源利用率不高时,剩余资源无法被分配给其他应用程式, 而且维护许多物理服务器的成本很高。
虚拟化部署时代
因此,虚拟化技术被引入了。虚拟化技术允许你在单个物理服务器的 CPU 上运行多台虚拟机(VM)。 虚拟化能使应用程序在不同 VM 之间被彼此隔离,且能提供一定程度的安全性, 因为一个应用程序的信息不能被另一应用程序随意访问。
容器部署时代
容器类似于 VM,但是更宽松的隔离特性,使容器之间可以共享操作系统(OS)。 因此,容器比起 VM 被认为是更轻量级的。且与 VM 类似,每个容器都具有自己的文件系统、CPU、内存、进程空间等。 由于它们与基础架构分离,因此可以跨云和 OS 发行版本进行移植。
容器是打包和运行应用程序的好方式。在生产环境中, 你需要管理运行着应用程序的容器,并确保服务不会下线。 例如,如果一个容器发生故障,则你需要启动另一个容器。 如果此行为交由给系统处理,是不是会更容易一些?
Kubernetes,它能做什么?
服务发现和负载均衡
存储编排
自动部署和回滚
自动完成装箱计算(每个容器需要多少 CPU 和内存 (RAM))
自我修复
密钥与配置管理
基础概念
常用的对象:
Namespace
Pod
ReplicaSet
Deployment
Job
Cornjob
Node
Service
Ingress
Volume
PersistenVulume
Secret
ConfigMap
Kubectl 配置
更新 apt 包索引,并安装使用 Kubernetes apt 仓库所需要的包:
Shell
sudo apt-get update
sudo apt-get install -y ca-certificates curl
如果你使用 Debian 9(stretch)或更早版本,则你还需要安装 apt-transport-https:
Shell
sudo apt-get install -y apt-transport-https
下载 Google Cloud 公开签名秘钥:
Shell
sudo curl -fsSLo /etc/apt/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
添加 Kubernetes apt 仓库:
Shell
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
更新 apt 包索引,使之包含新的仓库并安装 kubectl:
Shell
sudo apt-get update
sudo apt-get install -y kubectl
配置内容~/.kube/config
Bash
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJkekNDQVIyZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQWpNU0V3SHdZRFZRUUREQmhyTTNNdGMyVnkKZG1WeUxXTmhRREUyTmprd09EZzFOVEl3SGhjTk1qSXhNVEl5TURNME1qTXlXaGNOTXpJeE1URTVNRE0wTWpNeQpXakFqTVNFd0h3WURWUVFEREJock0zTXRjMlZ5ZG1WeUxXTmhRREUyTmprd09EZzFOVEl3V1RBVEJnY3Foa2pPClBRSUJCZ2dxaGtqT1BRTUJCd05DQUFUWjU4a2gxOUU0MkozSW9zbFZtYWdRNTc4dTZjYlpWRm5aVVc5QytOeWwKRFJnL01GdnVVSGdEY012ZXFQaDdRZk01TVlvek93NzV3dWppNnQ4M0hReWhvMEl3UURBT0JnTlZIUThCQWY4RQpCQU1DQXFRd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVUhPYjdVQ3hlK0VKYlh0NGdlWTVnCjdHTUg1OG93Q2dZSUtvWkl6ajBFQXdJRFNBQXdSUUloQVBQWTd0b1lOWXBpcGI5QWdVdWpSbFR3U0liV3U4V2gKUUphR0YycWVWc0FLQWlBOEc5NzdEcC9nOG5MMUV0MFJmdzIvOUtvalhGRVc0QjRGN0pha09ROWRmQT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
server: https://47.102.129.96:6443
name: default
contexts:
- context:
cluster: default
user: default
name: default
current-context: default
kind: Config
preferences: {}
users:
- name: default
user:
client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJrRENDQVRlZ0F3SUJBZ0lJTXRyVmtIYnRmbDR3Q2dZSUtvWkl6ajBFQXdJd0l6RWhNQjhHQTFVRUF3d1kKYXpOekxXTnNhV1Z1ZEMxallVQXhOalk1TURnNE5UVXlNQjRYRFRJeU1URXlNakF6TkRJek1sb1hEVEl6TVRFeQpNakF6TkRJek1sb3dNREVYTUJVR0ExVUVDaE1PYzNsemRHVnRPbTFoYzNSbGNuTXhGVEFUQmdOVkJBTVRESE41CmMzUmxiVHBoWkcxcGJqQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VIQTBJQUJIN29YWTloOVRLMWx5UFMKdFo5ZjZYb2JmZXJtSFRwQ0JoMytYMFdGYWJxaGM5TUo4TWxrcWxwZmt5RjhTTGp1ZnBNazE5OUhwc2Y1SHZnVwpUZzEzcDlDalNEQkdNQTRHQTFVZER3RUIvd1FFQXdJRm9EQVRCZ05WSFNVRUREQUtCZ2dyQmdFRkJRY0RBakFmCkJnTlZIU01FR0RBV2dCU1RMcFh2c1Nxb29lM21MK01SWDVmQzlHMlM1akFLQmdncWhrak9QUVFEQWdOSEFEQkUKQWlBSmduTExTZmpoeHFHMU5abVNzVDJCY0xBTXd2dzExTmlIRWlRWWJoOGZMd0lnVExXNXU5YmRURGJWQVREZQpabWpudmFIaWJNOXBLU3BKdVU4ZDlXcUl2MkE9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJkakNDQVIyZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQWpNU0V3SHdZRFZRUUREQmhyTTNNdFkyeHAKWlc1MExXTmhRREUyTmprd09EZzFOVEl3SGhjTk1qSXhNVEl5TURNME1qTXlXaGNOTXpJeE1URTVNRE0wTWpNeQpXakFqTVNFd0h3WURWUVFEREJock0zTXRZMnhwWlc1MExXTmhRREUyTmprd09EZzFOVEl3V1RBVEJnY3Foa2pPClBRSUJCZ2dxaGtqT1BRTUJCd05DQUFRSkJFOUhtUG5JejJwQnpCTmkzY1hRSnJ3aWdiWVBwRi9YU2pvK0FOREsKcENVZ1Ztd3dqR21iQWlWVlNFWmJIMVpobEZVeFFRYXZmQWNHdXVpTHFrcmFvMEl3UURBT0JnTlZIUThCQWY4RQpCQU1DQXFRd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVWt5NlY3N0VxcUtIdDVpL2pFVitYCnd2UnRrdVl3Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYlY4dTZCLy9tR3dXUmI1amJHR2o4TG5BTE9zS1IrTEQKRjVGVWpqNzl3THdDSUNPUi9zUlZGTm96UkVZYnlUMzBIUzFKbzVVVGorM0dTSno5bkpXaFRLTmoKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
client-key-data: LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSUFTanRaR3RUQXhCbHFhclpKZS8yMnQ0SFJGSUlBKzRSL2V4WDg5YzBNUVNvQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFZnVoZGoySDFNcldYSTlLMW4xL3BlaHQ5NnVZZE9rSUdIZjVmUllWcHVxRnowd253eVdTcQpXbCtUSVh4SXVPNStreVRYMzBlbXgva2UrQlpPRFhlbjBBPT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo=
常用命令
kubectl get nodes 获取kubenets节点
kubectl apply -f 应用配置文件
kubectl delete * 删除某种资源
kubectl port-forward 将端口映射到本地
kubectl rollout 回滚
kubectl describe
kubectl exec 以bash方式登陆到Pod中的某个容器里
kubectl logs 查看stdout日志
https://cloud.tencent.com/developer/article/1638810
k3s节点扩容
后续建议迁移到阿里云ask中
镜像拉取配置
需要重启k3s节点才能生效
手动重启 k3s server:
sudo systemctl restart k3s
手动重启 k3s agent:
sudo systemctl restart k3s-agent
服务部署(ci/cd)
以cybercollection为例:
编写dockerfile文件
在云效中配置镜像的打包
编写部署策略
服务部署上线
kubectl -n {命名空间} apply -f
refer:
