Kubernetes,简称K8s,是用8代替名字中间的8个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。
安装并配置Kubernetes 安装Dockerdocker的安装流程主要参考官方文档。如果下载速度过慢,也可以参考我的这篇文章更换国内源。
查看系统架构首先为了找到我们需要的正确版本的docker,需要查看系统架构。
uname -a安装docker
这里安装的docker的版本号为5:19.03.6~3-0~ubuntu-bionic。
sudo apt-get install docker-ce=5:19.03.6~3-0~ubuntu-bionic docker-ce-cli=5:19.03.6~3-0~ubuntu-bionic containerd.io配置主节点
首先,我们需要完成master节点的环境配置。
安装kubeadmin,kubectl,kubelet参考官网连接。我们安装的kubeadmin kubectl kubelet版本号为v1.17.3。
初始化控制层节点参考官网连接。
安装节点网络插件(Pod network add-on)为了管理复杂的集群网络,使得未来集群中的Node和Pod可以按照我们的需要配置网络结构,需要安装一些网络插件。这里展示的步骤是安装常用的calico插件。
kubeadm init --pod-network-cidr=192.168.0.0/16 # 以管理员身份运行则运行 export KUBECONFIG=/etc/kubernetes/admin.conf # 若非管理员身份 # 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://docs.projectcalico.org/v3.11/manifests/calico.yaml
期间如果报错提示需要关闭swap,运行
swapoff -a配置worker节点
有了master节点后,还需要加入工作节点才能构成一个集群。
worker节点加入kubeadm join 172.31.79.158:6443 --token使用命令生成worker的命令--discovery-token-ca-cert-hash sha256:
kubeadm token create --print-join-command常用命令 查看pods列表
kubectl get pods -A查看pod详细信息
如果有存在pending状态的节点,使用describe命令查看其对应events。
kubectl describe pods -A配置集群监控
prometheus是集群中非常常用的性能监控服务。
安装prometheus 拉取 kube-prometheusgit clone https://github.com/coreos/kube-prometheus.git配置prometheus组件
kubectl create -f manifests/setup until kubectl get servicemonitors --all-namespaces ; do date; sleep 1; echo ""; done kubectl create -f manifests/暴露端口
Prometheus
kubectl --namespace monitoring port-forward svc/prometheus-k8s 9090
然后可以通过 http://localhost:9090来访问Prometheus。
Grafana
kubectl --namespace monitoring port-forward svc/grafana 3000
然后可以通过http://localhost:3000 来访问Grafana,默认的用户名密码均为admin。
警告管理
kubectl --namespace monitoring port-forward svc/alertmanager-main 9093
然后可以通过http://localhost:9093来访问。
对外暴露服务端口为了在集群之外的机器上可以访问到上面的监控服务,我们还需要将网络模式配置为NodePort。
kubectl patch svc -n monitoring prometheus-k8s --type='json' -p '[{"op":"replace","path":"/spec/type","value":"NodePort"}]'
kubectl patch svc -n monitoring grafana --type='json' -p '[{"op":"replace","path":"/spec/type","value":"NodePort"}]'
kubectl patch svc -n monitoring alertmanager-main --type='json' -p '[{"op":"replace","path":"/spec/type","value":"NodePort"}]'
常见问题
本地端口访问异常
如果在安装期间报错The connection to the server localhost:8080 was refused,与安装节点网络插件一样,运行
# 以管理员身份运行则运行 export KUBECONFIG=/etc/kubernetes/admin.conf # 若非管理员身份 # mkdir -p $HOME/.kube # sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config # sudo chown $(id -u):$(id -g) $HOME/.kube/configtaints相关问题
在这篇文章提到了相关问题的解决方法,一般执行命令kubectl taint nodes node1 key:NoSchedule-即可。这条命令表示将node1上的NoSchedule这一标记给去除。这种标记用来表示不会将任务调度至该节点,可以起到保护特定节点的作用)。
其他 查看当前网络服务监听情况我们可以使用netstat -tnlp来查看当前服务器的端口使用情况。
其中,Program name为kube-proxy的服务就是通过port-forward建立的代理,指向某个pod的端口。
我们可以使用命令kubectl get svc -A来查看集群中的服务列表。
可以看到,其中grafana、prometheus-k8s和alertmanager-main三个服务的TYPE已经修改成了NodePort,在PORT(S)部分冒号前面的是pod内部端口,访问冒号后面的是外网端口。分别可以用curl localhost:${port}和curl ${ip}:${port}来进行访问。
kubectl get svc -n monitoring grafana -o yaml
以下的命令展示了如何把服务配置输出到文件,在文件中修改之后可以用第二行命令来更新现有服务配置。
kubectl get svc -n monitoring alertmanager-main -o yaml > alertmanager-main.yaml kubectl patch svc -n monitoring alertmanager-main --patch "$(cat alertmanager-main.yaml)"参考资料
https://kubernetes.io/zh/



