接触kubernetes两年有余,从18年初加入kubernetes社区来算,已经一年半,或许是时候写点什么。简单文章如何写好,难点文章如何写透,或许是一种学问,打算推一个系列:《Kubernetes GO》算是对这两年的一个总结。
kubernetes 1.16 已在前天正式发布,
kubeadm是Kubernetes官方提供的用于快速安装Kubernetes集群的工具,其中kubespray 比较适合较大规模的集群部署,*步骤,为可选操作,该文章主要介绍,以下内容:
kubernetes编译
kubernetes部署
kubernetes测试(待续)
下面我们看看如何编译及部署,在使用kubeadm部署前,需要编译以下镜像及执行文件,下面我们以v1.17.0-alpha.0版本为例:
通过关注右侧公众号,输出1.17a
获取下面的基础镜像 其中prepare.tgz为编译基础镜像,117alpha.tgz为v1.17.0-alpha.0所需镜像及二进制文件
golang 1.12.9+
ip、iptables、ipset、mount、nsenter、ebtables、ethtool, socat, tc、touch、conntrack、ipvsadm、jq、sysstat、curl、libseccomp
等命令行
1.16版本回顾
9月18日,Kubernetes 1.16正式发布,其包含31项增强功能,其中8项增强功能已经GA,另有8项增强功能处于beta阶段,15项处于alpha阶段,该版本有以下亮点:
自定义资源(CRD)
CRD作为Kubernetes的可扩展机制之一得到广泛使用,其自1.7版本发布以来就一直处于beta阶段。Kubernetes 1.16版本,也标志着CRD迎来了GA版本。
存储卷扩展
新版本当中包含一系列与存储卷以及卷修改相关的功能。CSI规范中的存储卷大小调整能力提升为beta阶段,允许用户对CSI规范下的存储卷插件进行大小调整。
拓扑管理[alpha]
Kubelet中旨在协调资源分配决策,从而提供优化效果更好的资源分配能力
双栈[alpha]
IPv4/IPv6双栈可以将IPv4与IPv6地址分配给各Pod与服务
若只需要部署v1.17.0-alpha.0版本,可跳过编译过程。
前期准备 社区 的文档介绍了如果编译相关镜像等工作,如果有兴趣,可仔细阅读,确认golang版本go version
>= 1.12.9:
下载编译镜像* 目前基础镜像为k8s.gcr.io/kube-cross:v1.12.9-1
,如果需要确认读者目前所需镜像,在执行KUBE_GIT_VERSION=v1.17.0-alpha.0 KUBE_FASTBUILD=true KUBE_BUILD_PULL_LATEST_IMAGES=n make release-images
时需要,若本地不存在该镜像,会出现报错,因某种不可抗力因数,需要使用代理进行镜像拉取
国内无法直接获取 gcr.io/*
镜像,我们可以将 gcr.io/<repo-name>/<image-name>:<version>
替换为 gcr.azk8s.cn/<repo-name>/<image-name>:<version>
,例如
1 2 3 4 $ docker pull gcr.azk8s.cn/google_containers/kube-cross:v1.12.9-1 $ docker tag gcr.azk8s.cn/google_containers/kube-cross:v1.12.9-1 k8s.gcr.io/kube-cross:v1.12.9-1
编译代码 下面切换到$GOPATH/src/k8s.io目录,如无则创建,执行git clone https://github.com/kubernetes/kubernetes
, 下载完成后,切换到该目录,执行以下操作
1 2 3 4 5 6 7 tar -zxvf prepare.tgz k8s.gcr.io/kube-cross v1.12.9-1 a808db72440c 5 weeks ago 1.87GB k8s.gcr.io/debian-iptables-amd64 v11.0.2 01a746008995 5 months ago 45.4MB k8s.gcr.io/debian-base-amd64 v1.0.0 204e96332c91 5 months ago 42.3MB k8s.gcr.io/debian-hyperkube-base-amd64 v0.12.1 a46476511725 7 months ago 393MB
修改设置 确认bash --version
> 4.3,否则出现以下问题
1 2 3 4 /root/go/src/k8s.io/kubernetes/build/lib/release.sh:行385: docker_build_opts[@]: 为绑定变量 /root/go/src/k8s.io/kubernetes/build/lib/release.sh:行385: docker_build_opts[@]: 为绑定变量 /root/go/src/k8s.io/kubernetes/build/lib/release.sh:行385: docker_build_opts[@]: 为绑定变量 /root/go/src/k8s.io/kubernetes/build/lib/release.sh:行385: docker_build_opts[@]: 为绑定变量
若不打算更新bash,则做以下修改:
1 2 3 4 5 6 7 8 9 10 11 git diff build/lib/release.sh diff --git a/build/lib/release.sh b/build/lib/release.sh index 73c0bcc..e7bd1b1 100644 --- a/build/lib/release.sh +++ b/build/lib/release.sh @@ -382,7 +382,7 @@ EOF if [[ "${KUBE_BUILD_PULL_LATEST_IMAGES} " =~ [yY] ]]; then docker_build_opts+=("--pull" ) fi - "${DOCKER[@]} " build "${docker_build_opts[@]} " -q -t "${docker_image_tag} " "${docker_build_path} " >/dev/null + "${DOCKER[@]} " build -q -t "${docker_image_tag} " "${docker_build_path} " >/dev/null
修改完记得提交,若编译前,对代码有改动,且未提交,即未执行git commit
操作,执行编译KUBE_GIT_VERSION=v1.17.0-alpha.0 KUBE_FASTBUILD=true KUBE_BUILD_PULL_LATEST_IMAGES=n make release-images
,则生成的镜像即版本为dirty版本,其他编译操作参见下面链接:
若编译前,对代码有改动,且未提交,即未执行git commit
操作,则生成的镜像即版本为dirty版本,执行下述命令(可执行bash -x):
最终生成以下镜像结果
1 2 3 ls _output/release-images/amd64/conformance-amd64.tar kube-apiserver.tar kube-proxy.tar hyperkube-amd64.tar kube-controller-manager.tar kube-scheduler.tar
下面为二进制执行文件
1 2 3 4 5 6 7 ls _output/dockerized/bin/linux/amd64/apiextensions-apiserver e2e.test genyaml hyperkube kubelet mounter conversion-gen gendocs ginkgo kubeadm kubemark openapi-gen deepcopy-gen genkubedocs go2make kube-apiserver kube-proxy defaulter-gen genman go-bindata kube-controller-manager kube-scheduler e2e_node.test genswaggertypedocs go-runner kubectl linkcheck
下述表单为kubeadm及kubernetes维护时限
kubeadm 成熟程度
功能
成熟程度
命令行用户体验
beta
功能实现
beta
配置文件 API
alpha
自托管
alpha
kubeadm alpha 子命令
alpha
CoreDNS
GA
动态 Kubelet 配置
alpha
维护周期 Kubernetes 发现版本的通常只维护支持九个月,在维护周期内,如果发现有比较重大的 bug 或者安全问题的话, 可能会发布一个补丁版本。下面是 Kubernetes 的发布和维护周期,同时也适用于 kubeadm
。
Kubernetes 版本
发行月份
终止维护月份
v1.10.x
2018 年 3 月
2018 年 12 月
v1.11.x
2018 年 6 月
2019 年 3 月
v1.12.x
2018 年 9 月
2019 年 6 月
v1.13.x
2018 年 12 月
2019 年 9 月
v1.14.x
2019 年 3 月
2019 年 12 月
v1.15.x
2019 年 6 月
2020 年 3 月
v1.16.x
2019 年 9 月
2020 年 6 月
系统配置 在安装之前,需要做一些设置处理,当前准备两台CentOS 7.x如下所示:
1 2 3 cat /etc/hosts10.142.21.132 kargo 10.142.114.189 paasn1
下面需要对各主机进行安装前检查
设置防火墙 简单起见,可以关闭所有节点的防火墙:
1 2 systemctl stop firewalld systemctl disable firewalld
禁用SElinux 1 2 3 4 5 setenforce 0 vi /etc/selinux/config SELINUX=disabled
内核配置 1 2 3 4 5 cat <<EOF > /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sysctl -p /etc/sysctl.d/k8s.conf
确认br_netfilter模块lsmod | grep br_netfilter
启用此内核模块,以便遍历桥的数据包由iptables进行处理以进行过滤和端口转发,并且群集中的kubernetes窗格可以相互通信modprobe br_netfilter
安装依赖命令行
yum install -y conntrack ipvsadm ipset jq sysstat curl iptables libseccomp socat -y
若kube-proxy需要开启ipvs,则下述模块需要存在
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack_ipv4
可选: 若kube-proxy需要开启ipvs,则下述模块需要存在, 在所有的Kubernetes节点kargo和paasn1上执行以下脚本
1 2 3 4 5 6 7 8 9 cat > /etc/sysconfig/modules/ipvs.modules <<EOF #!/bin/bash modprobe -- ip_vs modprobe -- ip_vs_rr modprobe -- ip_vs_wrr modprobe -- ip_vs_sh modprobe -- nf_conntrack_ipv4 EOF chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4
磁盘配置
容器引擎安装 从docker官方库安装kubernetes最新兼容性测试的匹配版本,Kubernetes 1.16+支持的docker版本列表依然是1.13.1, 17.03, 17.06, 17.09, 18.06, 18.09 安装docker-ce的软件包依赖,当前安装18.09.7:
1 2 3 4 5 6 7 8 9 10 yum install -y yum-utils \ device-mapper-persistent-data \ lvm2 yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo yum install docker-ce docker-ce-cli containerd.io -y
对于使用systemd作为的Linux的发行版,使用systemd作为docker的cgroup-river 可以确保服务器节点在资源紧张的情况更加稳定,因此这里修改各节点上docker的cgroup-driver为systemd。 创建/etc/docker/daemon.json
1 2 3 { "exec-opts" : ["native.cgroupdriver=systemd" ] }
重启docker服务
1 2 3 4 5 6 systemctl restart docker docker info | grep Cgroup Cgroup Driver: systemd systemctl enable docker
2. 使用kubeadm部署kubernetes 以下为kubernetes 1.16+软件版本依赖信息: 执行kubeadm config images list
获取镜像版本信息
软件
版本或镜像
apiserver
k8s.gcr.io/kube-apiserver:v1.17.0-alpha.0
controller-manager
k8s.gcr.io/kube-controller-manager:v1.17.0-alpha.0
scheduler
k8s.gcr.io/kube-scheduler:v1.17.0-alpha.0
proxy
k8s.gcr.io/kube-proxy:v1.17.0-alpha.0
pause
k8s.gcr.io/pause:3.1
etcd
k8s.gcr.io/etcd:3.3.15-0
coredns
k8s.gcr.io/coredns:1.6.2
同样kubernetes-cni-0.7.5-0.x86_64也需要安装
2.1 安装kubeadm及kubelet 所有节点执行以下操作:
安装依赖软件 解压117alpha.tgz,tar -xzvf 117alpha.tgz -C /root/
,切换至/root/
目录 执行rpm -ivh *.rpm
安装kubelet、kubeadm、kubectl 若已经执行编译操作,则该操作跳过 否则,将/root/下上述执行文件拷贝到/usr/bin/目录下
创建kubelet.service 其中kubelet配置通过命令行–config指定配置文件,其内容在kubeadm执行时,进行初始化。具体查看官网kubelet配置 。 Kubernetes关于为了Kubelet动态配置的特性当前为beta版本。
1 2 3 4 5 6 7 8 9 10 11 12 13 cat <<EOF >/etc/systemd/system/kubelet.service.d/10-kubeadm.conf # Note: This dropin only works with kubeadm and kubelet v1.11+ [Service] Environment="KUBELET_KUBECONFIG_ARGS=--v=6 --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf" Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml" # This is a file that "kubeadm init" and "kubeadm join" generates at runtime, populating the KUBELET_KUBEADM_ARGS variable dynamically EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env # This is a file that the user can use for overrides of the kubelet args as a last resort. Preferably, the user should use # the .NodeRegistration.KubeletExtraArgs object in the configuration files instead. KUBELET_EXTRA_ARGS should be sourced from this file. EnvironmentFile=-/etc/sysconfig/kubelet ExecStart= ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS EOF
1 2 3 4 5 6 7 8 9 10 11 12 13 14 cat <<EOF >/etc/systemd/system/kubelet.service [Unit] Description=kubelet: The Kubernetes Node Agent Documentation=http://kubernetes.io/docs/ [Service] ExecStart=/usr/bin/kubelet Restart=always StartLimitInterval=0 RestartSec=10 [Install] WantedBy=multi-user.target EOF
1 2 3 4 systemctl daemon-reloads systemctl enable kubelet.service
2.2 kubeadm初始化 使用kubeadm config print init-defaults可以打印集群初始化默认的使用的配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 apiVersion: kubeadm.k8s.io/v1beta2 bootstrapTokens: - groups : - system:bootstrappers:kubeadm:default-node-token token: abcdef.0123456789abcdef ttl: 24h0m0s usages: - signing - authentication kind: InitConfiguration localAPIEndpoint: advertiseAddress: 1.2.3.4 bindPort: 6443 nodeRegistration: criSocket: /var/run/dockershim.sock name: kargo taints: - effect: NoSchedule key: node-role.kubernetes.io/master --- apiServer: timeoutForControlPlane: 4m0s apiVersion: kubeadm.k8s.io/v1beta2 certificatesDir: /etc/kubernetes/pki clusterName: kubernetes controllerManager: {} dns: type : CoreDNS etcd: local : dataDir: /var/lib/etcd imageRepository: k8s.gcr.io kind: ClusterConfiguration kubernetesVersion: v1.16.0 networking: dnsDomain: cluster.local serviceSubnet: 10.96.0.0/12 scheduler: {}
其中镜像地址可通过imageRepository参数进行自定义,若本地已加载所需镜像,则无须改变,根据测试环境的实际情况,kubernetesVersion对应kubeadm version
中GitVersion版本,将kubeadm.conf修改为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 cat <<EOF >/root/kubeadm.conf apiVersion: kubeadm.k8s.io/v1beta2 bootstrapTokens: - groups: - system:bootstrappers:kubeadm:default-node-token token: abcdef.0123456789abcdef ttl: 24h0m0s usages: - signing - authentication kind: InitConfiguration localAPIEndpoint: advertiseAddress: 10.142.21.132 bindPort: 6443 nodeRegistration: criSocket: /var/run/dockershim.sock name: kargo taints: - effect: NoSchedule key: node-role.kubernetes.io/master --- apiServer: timeoutForControlPlane: 4m0s apiVersion: kubeadm.k8s.io/v1beta2 certificatesDir: /etc/kubernetes/pki clusterName: kubernetes controllerManager: {} dns: type: CoreDNS etcd: local: dataDir: /var/lib/etcd imageRepository: k8s.gcr.io kind: ClusterConfiguration kubernetesVersion: v1.17.0-alpha.0 networking: dnsDomain: cluster.local serviceSubnet: 10.96.0.0/12 scheduler: {} EOF
接下来使用kubeadm初始化集群,选择kargo作为Master Node,在kargo上执行下面的命令:kubeadm init --config /root/kubeadm.conf
该命令会生成以下内容:
[kubelet-start] 生成kubelet的配置文件”/var/lib/kubelet/config.yaml”
[kubeconfig]生成相关的kubeconfig文件
[control-plane]使用/etc/kubernetes/manifests目录中的yaml文件创建apiserver、controller-manager、scheduler的静态pod
[bootstraptoken]生成token记录下来,后边使用kubeadm join往集群中添加节点时会用到
[certs]生成相关的各种证书
访问集群 1 2 mkdir -p $HOME /.kubecp -i /etc/kubernetes/admin.conf /root/.kube/config
关于kubernetes的接入说明,具体可参看集群接入
验证集群 查看一下集群状态,确认个组件都处于healthy状态:
1 2 3 4 5 6 7 8 9 Kubernetes master is running at https://10.233.0.1 CoreDNS is running at https://10.233.0.1/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy NAME STATUS MESSAGE ERROR controller-manager Healthy ok scheduler Healthy ok etcd-0 Healthy {"health" :"true" }
加入节点 若有详细了解kubeadm join
命令的需求,可参看kubeadm join 加入集群,需要提供CA密钥的哈希,格式:sha256:,在成功kubeadm init
后,输出结果会显示合适的join命令,当然可以如下自己生成,
1 2 3 4 5 6 7 8 kubeadm token create a9trii.8d52xbbusol0glji openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //' 31b110e7fea9c86ddc6c1caa9f27f39021ea115ab7d2b5a86e157c42d9c8c57c kubeadm join --discovery-token 9trii.8d52xbbusol0glji --discovery-token-ca-cert-hash sha256:31b110e7fea9c86ddc6c1caa9f27f39021ea115ab7d2b5a86e157c42d9c8c57c 10.142.21.132:6443 -v=6
paasn1加入集群成功后,在kargo节点上执行命令查看集群中的节点:
1 2 3 4 kubectl get node NAME STATUS ROLES AGE VERSION kargo Ready master 57m v1.17.0-alpha.0 passn1 Ready <none> 11s v1.17.0-alpha.0
验证etcd安装* 如果配置正确,那么上述命令执行结果应该是任何输出的。如果结果有错,请参照上述配置和环境变量文件检查配置。一旦我们顺利启动etcd
服务,我们还需要正确检查我们的etcd
集群是否可用,在etcd
集群中任一节点中执行以下命令:
1 2 3 4 5 6 7 8 9 10 11 12 13 docker ps|grep etcd 0214f9a78ba5 b2756210eeab "etcd --advertise-cl…" 4 hours ago Up 4 hours k8s_etcd_etcd-kargo_kube-system_2b66f634d9a00ad56540109b231dd318_3 20419a0de748 k8s.gcr.io/pause:3.1 "/pause" 9 days ago Up 1 days k8s_POD_etcd-kargo_kube-system_2b66f634d9a00ad56540109b231dd318_2 docker exec -it 168729f100e0 etcdctl --endpoint https://127.0.0.1:2379 \ --endpoint https://127.0.0.1:2379 \ --ca-file=/etc/ssl/etcd/ssl/ca.pem \ --cert-file=/etc/ssl/etcd/ssl/ca.pem \ --key-file=/etc/ssl/etcd/ssl/ca-key.pem \ cluster-health member 38ee253c41f760ca is healthy: got healthy result from https://10.142.21.132:2379 cluster is healthy
集群重置* 集群初始化如果遇到问题,可以使用下面的命令进行清理
1 2 3 kubeadm reset rm -rf /var/lib/cni/ /var/lib/etcd/rm -rf /var/lib/kubelet /etc/kubernetes/
安装网络 接下来,选择calico作为网络插件,具体说明,参见相关文档网络插件 其中calico部署简单如下所述:
1 2 POD_CIDR="<your-pod-cidr>" \ sed -i -e "s?192.168.0.0/16?$POD_CIDR ?g" calico.yaml
相关文档,参见calico部署
执行部署脚本kubectl apply -f calico.yaml
测试网络及dns 首先,确认calico及coredns相关pod是否运行正确 在一切正常情况下,你会得到类似如下的输出结果:
1 2 3 4 5 6 7 8 9 calico-kube-controllers-744795b577-jc4r7 1/1 Running 0 1d calico-node-7lbdm 1/1 Running 8 1d coredns-7f547f9899-7l9cq 1/1 Running 0 1d dns-autoscaler-7bf66d8bd8-l52bn 1/1 Running 0 1d kubectl run busybox --image=busybox:latest --restart=Never
进入busybox执行nslookup,查询kubernetes服务地址:
1 2 3 4 5 6 7 8 9 10 11 kubectl run -it busybox sh nslookup kubernetes.default Server: 10.233.0.3 Address 1: 10.233.0.3 kube-dns.kube-system.svc.cluster.local Name: kubernetes.default Address 1: 10.233.0.3 kubernetes.default.svc.cluster.local ping 10.142.21.132 若ping通,则网络正常
部署插件* 为了更好的管理与使用kubernetes集群,开源社区提供了多种工具,如应用管理、监控、日志、负载均衡等,另外kubernetes提供两种扩展方式:使用聚合层 与第三方资源管理
软件包管理 Helm工具由Deis发起,该公司在17年初收购,该软件由客户端命helm令行工具和服务端tiller组成,Helm的安装十分简单。 下载helm命令行工具到master节点node1的/usr/local/bin下,这里下载的2.14.3版本:
1 2 3 4 curl -O https://get.helm.sh/helm-v2.14.3-linux-amd64.tar.gz tar -zxvf helm-v2.14.3-linux-amd64.tar.gz cd linux-amd64/cp helm /usr/local/bin/
软件包的管理理念并不是Deis,这里势必需要提及一下mesosphere,其开创软件包c/s管理模式,可惜在mesos vs kubernetes的战争中落败,而失去初始的光芒。 为了安装服务端tiller,需要在主机配置kubectl工具和kubeconfig文件,确保kubectl工具可以在这台机器上访问apiserver且正常使用。 这里的kargo节点已经配置好了kubectl。
因为Kubernetes APIServer开启了RBAC访问控制,所以需要创建tiller使用的service account: tiller并分配合适的角色给它。 详细内容可以查看helm文档中的RBAC 。 这里简单起见直接分配cluster-admin这个集群内置的ClusterRole给它。创建helm-rbac.yaml文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 cat <<EOF >/root/helm.yaml apiVersion: v1 kind: ServiceAccount metadata: name: tiller namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRoleBinding metadata: name: tiller roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: tiller namespace: kube-system EOF kubectl apply -f /root/helm.yaml
接下来部署tiller:
helm init --service-account tiller --skip-refresh
tiller默认被部署在k8s集群中的kube-system这个namespace下:
1 2 3 kubectl get pod -n kube-system -l app=helm NAME READY STATUS RESTARTS AGE tiller-deploy-7d666f8ccc-92h27 1/1 Running 5 1d
如上所述,使用代理镜像库 helm init –service-account tiller –tiller-image <你指定的镜像库名称>/tiller:v2.13.3 –skip-refresh 实际如下: helm init –service-account tiller –tiller-image gcr.azk8s.cn/google_containers/tiller:v2.13.1 –skip-refresh
修改helm charts仓库地址为微软提供的镜像地址:
1 2 3 4 5 6 7 helm repo add stable http://mirror.azure.cn/kubernetes/charts "stable" has been added to your repositorieshelm repo list NAME URL stable http://mirror.azure.cn/kubernetes/charts local http://127.0.0.1:8879/charts
部署核心监控 kubernetes使用metrics-server 提供节点及pod级别的资源监控, 其为metrics.k8s.io
接口组,为弹性伸缩模块等模块提供接口,具体详见kubernetes监控架构
拉取代码git clone https://github.com/kubernetes-incubator/metrics-server
修改配置 修改deploy/1.8+/metrics-server-deployment.yaml
文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 --- apiVersion: v1 kind: ServiceAccount metadata: name: metrics-server namespace: kube-system --- apiVersion: apps/v1 kind: Deployment metadata: name: metrics-server namespace: kube-system labels: k8s-app: metrics-server spec: selector: matchLabels: k8s-app: metrics-server template: metadata: name: metrics-server labels: k8s-app: metrics-server spec: serviceAccountName: metrics-server volumes: - name: tmp-dir emptyDir: {} containers: - name: metrics-server image: k8s.gcr.io/metrics-server-amd64:v0.3.4 imagePullPolicy: Always args: - --logtostderr - --kubelet-insecure-tls - --kubelet-preferred-address-types=InternalIP volumeMounts: - name: tmp-dir mountPath: /tmp
1 2 3 4 5 6 7 8 kubectl get po -n kube-system -l k8s-app=metrics-server NAME READY STATUS RESTARTS AGE metrics-server-66fc8cddfb-cwvcf 1/1 Running 6 1d kubectl top node NAME CPU(cores) CPU% MEMORY(bytes) MEMORY% kargo 1533m 19% 9430Mi 61% paasn1 4443m 56% 10490Mi 67%
部署仪表盘 社区提供Dashboard项目,它为用户提供一个可视化的Web界面来查看当前集群的各种信息。用户可以使用Kubernetes Dashboard部署容器化的应用、监控应用的状态、执行故障排查任务以及管理Kubernetes各类资源。部署方式如下;
拉取代码https://github.com/kubernetes/dashboard
修改配置 将aio/deploy/recommended/02_dashboard-service.yaml
配置修改为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 kind: Service apiVersion: v1 metadata: labels: k8s-app: kubernetes-dashboard name: kubernetes-dashboard namespace: kubernetes-dashboard spec: ports: - port: 443 targetPort: 8443 selector: k8s-app: kubernetes-dashboard type : NodePort
获取分配访问端口:
1 2 3 kubectl get svc -n kubernetes-dashboard NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes-dashboard NodePort 10.233.41.73 <none> 443:30479/TCP 1d
获得主机端口30479,dashboard的界面绕过https,通过https://10.142.21.132:30479 nodeport方式 进行访问外,还可以执行以下代理操作
1 kubectl proxy --accept-hosts='^.*' --address='10.142.113.20' --port 8080
我们还可以通过http://10.142.21.132:8080/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/ ,如下图所示。
后续 针对上述涉及的内容,请关注后续文章
参考资料