目录
kubectl 是 Kubernetes 的命令行工具,可以通过跑命令来控制整个 Kubernetes 集群。
注意:kubectl 的版本要确保与 Kubernetes 最多上下相差一个小版本。安装最新的版本可以无视此项规定。
curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl
kubectl version
sudo apt-get update && sudo apt-get install -y apt-transport-https
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubectl
cat <<EOF > /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
yum install -y kubectl
curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/darwin/amd64/kubectl
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl
kubectl version
brew install kubernetes-cli
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.15.0/bin/windows/amd64/kubectl.exe
// 添加二进制文件到环境变量 PATH 中
kubectl version
自动补全的脚步可以通过 kubectl completion zsh 查看。下面是配置步骤:
在 ~/.zshrc 文件中添加
source <(kubectl completion zsh)
如果出现 complete:13: command not found: compdef 之类的错误,就在 ~/.zshrc 文件开头添加
autoload -Uz compinit
compinit
Minikube 可以在本地环境中的虚拟机上快速部署一个单节点的 Kubernetes 集群。
执行以下命令,当输出不为空时即可。
egrep --color 'vmx|svm' /proc/cpuinfo
执行以下命令,当输出不为空时即可。
sysctl -a | grep machdep.cpu.features | grep VMX
执行以下命令
systeminfo
当输出以下内容时,系统支持虚拟化技术。
Hyper-V Requirements: VM Monitor Mode Extensions: Yes
Virtualization Enabled In Firmware: Yes
Second Level Address Translation: Yes
Data Execution Prevention Available: Yes
当输出以下内容时,系统支持虚拟化技术,并且 Hypervisor 已经安装了,可以忽略下个步骤。
Hyper-V Requirements: A hypervisor has been detected. Features required for Hyper-V will not be displayed.
当系统没有安装 Hypervisor 时,选择下列其中的一个安装即可。
当系统没有安装 Hypervisor 时,选择下列其中的一个安装即可。
当系统没有安装 Hypervisor 时,选择下列其中的一个安装即可。
curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && chmod +x minikube
sudo install minikube /usr/local/bin
使用 Homebrew
brew cask install minikube
使用二进制文件
curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-amd64 && chmod +x minikube
sudo mv minikube /usr/local/bin
使用安装器下载并运行 minikube-installer.exe
运行 minikube start ,如提示 machine does not exist,则运行 minikube delete 清理本地状态。
运行 minikube dashboard 会自动启动一个网页,在里面可以管理整个集群。
以下过程可以通过 Module 2 - Deploy an app,在线交互式地完成。
kubectl get nodes
kubectl run kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1 --port=8080
通过以下查看部署的应用及状态,等待状态变为 Ready 。
kubectl get deployments
可以通过以下命令创建一个代理,直接连接部署的 Pod 进行访问,这是暂时的,后面我们会使用 NodePort、LoadBalancer 等方式暴露服务。
kubectl proxy
通过以下命令查看Kubernetes 版本,测试代理是否成功。
curl http://localhost:8001/version
export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')
echo Name of the Pod: $POD_NAME
curl http://localhost:8001/api/v1/namespaces/default/pods/$POD_NAME/proxy/
以下过程可以通过Module 3 - Explore your app,在线交互式地完成。
通过以下命令,可以获取集群中所有 Pod 的信息,包含名称、名称空间、优先级、节点、状态、IP、容器、卷、事件等等。
kubectl describe pods
export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')
echo Name of the Pod: $POD_NAME
kubectl logs $POD_NAME
使用 kubectl 的 exec 指令,可以在容器中执行命令。因为我们之前部署的是单容器的 Pod,因此可以不用指定容器,使用 Pod Name 即可。如果多容器的话可以通过 -c 指定 Container。
kubectl exec $POD_NAME env
还可以直接打开容器内的 bash 进行交互,如下。
kubectl exec -ti $POD_NAME bash
ls
cat server.js
curl localhost:8080
exit
以下过程可以通过 Module 4 - Expose your app publicly,在线交互式地完成。
kubectl get pods
kubectl get services
// type 可选值:ClusterIP、NodePort、LoadBalancer
kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080
kubectl get services
export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}')
curl $(minikube ip):$NODE_PORT
使用 kubectl label 可以给 deployment、pod 以及 service 等等打标签,随后可以通过 kubectl get [deployment | pods | services | svc] -l 过滤带有指定标签的部署、Pod 或者服务等等。
// 给 Pod 打标签
export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')
echo Name of the Pod: $POD_NAME
kubectl label pod $POD_NAME app=v1
// 描述 Pod
kubectl describe pods $POD_NAME
// 使用标签过滤 Pod
kubectl get pods -l app=v1
// 删除服务
kubectl delete service -l run=kubernetes-bootcamp
// 列出现有服务
kubectl get services
// 外部不可访问
curl $(minikube ip):$NODE_PORT
// 内部可以访问
kubectl exec -ti $POD_NAME curl localhost:8080
以下过程可以通过 Module 5 -Scaling Your App,在线交互式地完成。
kubectl get deployments
kubectl scale deployments/kubernetes-bootcamp --replicas=4
kubectl get deployments
kubectl get pods -o wide
kubectl describe deployments/kubernetes-bootcamp
扩充后,Service 是负载均衡的,测试如下:
kubectl describe services/kubernetes-bootcamp
export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}')
echo NODE_PORT=$NODE_PORT
curl $(minikube ip):$NODE_PORT
curl $(minikube ip):$NODE_PORT
curl $(minikube ip):$NODE_PORT
kubectl scale deployments/kubernetes-bootcamp --replicas=2
kubectl get deployments
kubectl get pods -o wide
以下过程可以通过 Module 6 -Updating Your App,在线交互式地完成。
更新应用时,系统会扩充 Deployment,然后部署新镜像,旧的 Deployment 进入Terminating 状态。流量仅会在可用的 Deployments 之间负载均衡。
kubectl get deployments
kubectl get pods
kubectl describe pods
kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2
kubectl get pods
// 通过响应内容验证
kubectl describe services/kubernetes-bootcamp
export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}')
echo NODE_PORT=$NODE_PORT
curl $(minikube ip):$NODE_PORT
// 通过 rollout status 查看升级进度
kubectl rollout status deployments/kubernetes-bootcamp
kubectl describe pods
注意:当且仅当 Deployment 中的 pod template(例如.spec.template) 中的 label 更新或者镜像更改时触发 rollout。
kubectl rollout undo deployments/kubernetes-bootcamp
kubectl delete service kubernetes-bootcamp
kubectl delete deployment kubernetes-bootcamp
minikube stop
minikube delete
【Kubernetes 系列四】Kubernetes 实战:管理 Hello World 集群
原文:https://www.cnblogs.com/lshare/p/11336680.html