Kubernetes (简称K8s) 是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。它提供了容器编排、服务发现、负载均衡、自动扩缩容等功能。
Kubernetes需要容器运行时,推荐安装Docker:
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install -y docker.io
sudo systemctl enable docker
sudo systemctl start docker
# CentOS/RHEL
sudo yum install -y docker
sudo systemctl enable docker
sudo systemctl start docker
# 添加Kubernetes apt仓库
sudo apt-get update && sudo apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
# 安装组件
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
# CentOS/RHEL
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF
sudo yum install -y kubelet kubeadm kubectl
sudo systemctl enable --now kubelet
sudo kubeadm init --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 apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl cluster-info
kubectl get nodes
# 部署nginx示例
kubectl create deployment nginx --image=nginx
# 查看部署
kubectl get deployments
kubectl get pods
# 暴露服务
kubectl expose deployment nginx --port=80 --type=NodePort
# 查看服务
kubectl get services
# 扩展到3个副本
kubectl scale deployment nginx --replicas=3
# 查看pod分布
kubectl get pods -o wide
创建nginx-deployment.yaml
:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
应用配置:
kubectl apply -f nginx-deployment.yaml
# 创建命名空间
kubectl create namespace dev
# 在特定命名空间中部署应用
kubectl create deployment nginx --image=nginx -n dev
# 查看特定命名空间资源
kubectl get all -n dev
创建PVC (PersistentVolumeClaim):
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
kubectl logs <pod-name>
kubectl logs -f <pod-name> # 实时日志
kubectl top nodes
kubectl top pods
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml
# 创建访问令牌
kubectl create serviceaccount dashboard-admin-sa
kubectl create clusterrolebinding dashboard-admin-sa --clusterrole=cluster-admin --serviceaccount=default:dashboard-admin-sa
kubectl get secret $(kubectl get serviceaccount dashboard-admin-sa -o jsonpath="{.secrets[0].name}") -o jsonpath="{.data.token}" | base64 --decode
# 访问Dashboard
kubectl proxy
# 然后在浏览器访问: http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/
节点NotReady状态:
systemctl status kubelet
Pod一直处于Pending状态:
kubectl describe pod <pod-name>
镜像拉取失败:
kubectl命令无响应:
kubectl get componentstatuses
通过以上步骤,您应该能够在Linux系统上成功安装和使用Kubernetes进行容器编排。随着对Kubernetes的熟悉,您可以进一步探索更高级的功能如Helm包管理、StatefulSets、Operators等。