关于调度
k8s内pod由scheduler调度,scheduler的任务是把pod分配到合适的node节点上。scheduler调度时会考虑到node节点的资源使用情况、port使用情况、volume使用情况等等...在此基础之上,我们也可以控制pod的调度。
10篇 k8s 相关的文章
k8s内pod由scheduler调度,scheduler的任务是把pod分配到合适的node节点上。scheduler调度时会考虑到node节点的资源使用情况、port使用情况、volume使用情况等等...在此基础之上,我们也可以控制pod的调度。
service是pod的一个逻辑分组,是pod服务的对外入口抽象。service同样也通过pod的标签来选择pod,与控制器一致。
k8s中所有的内容都抽象成了资源,资源实例化后,称为对象。所有对象可以通过 get delete edit apply进行增删改查。通常分类以下三类资源
namespace为资源提供了集群内的逻辑隔离,需要注意的是,这只是逻辑隔离,不同namespace的pod有可能运行在同一个节点node上。
使用 nginx 的官方容器镜像。
镜像有了,我们如何将其提交给 K8S 运行呢,有两种方式:
这里使用官方推荐的第二种方式,即通过将容器的各种信息写入配置文件提交给 K8S。
找了段解释如下:
Kubernetes Service vs Deployment What's the difference between a
Service and a Deployment in Kubernetes?A deployment is responsible for keeping a set of pods running.
A service is responsible for enabling network access to a set of pods.
We could use a deployment without a service to keep a set of identical
pods running in the Kubernetes cluster. The deployment could be scaled
up and down and pods could be replicated. Each pod could be accessed
individually via direct network requests (rather than abstracting them
behind a service), but keeping track of this for a lot of pods is
difficult.We could also use a service without a deployment. We'd need to create
each pod individually (rather than "all-at-once" like a deployment).
Then our service could route network requests to those pods via
selecting them based on their labels.
直接翻译下就是:
depoyment负责保持一组Pod运行。
service负责启用对一组Pod的网络访问。
我们可以使用没有服务的部署来保持一组相同的Pod在Kubernetes集群中运行。 可以按比例放大和缩小部署,还可以复制Pod。 可以通过直接的网络请求(而不是将它们抽象到服务之后)分别访问每个Pod,但是要跟踪很多Pod很难。
我们也可以在没有部署的情况下使用服务。 我们需要分别创建每个Pod(而不是像部署那样“一次全部”创建)。 然后,我们的服务便可以根据标签的标签选择网络请求,将网络请求路由到这些Pod。
服务和部署是不同的,但是它们可以很好地协同工作。
换个方式理解就是:depoyment就是用容器镜像创的实例, service负责访问这些实例,可以将deployment的端口通过端口暴露给其它服务或外界网络。
in10环境,安装的VMware Workstation Pro,创建了一台Centos7.x的虚拟机。并启用虚拟化。
// v1.16.0版本可以从这里查 https://storage.googleapis.com/kubernetes-release/release/stable.txt
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.16.0/bin/linux/amd64/kubectl
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl
kubectl version
上述如果在墙内,需要http代理可以,先将代理设为环境变量 export http_proxy=http://ip:port
也可以从github上下载
https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG.md#client-binaries-1
找到Current release如 https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.16.md
再找到Client Binaries如v1.16.0下的 https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.16.md#client-binaries
再找到合适的tar包如 https://dl.k8s.io/v1.16.0/kubernetes-client-linux-amd64.tar.gz
wget https://dl.k8s.io/v1.16.0/kubernetes-client-linux-amd64.tar.gz
tar -zxvf kubernetes-client-linux-amd64.tar.gz
cd kubernetes/client/bin
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl
kubectl version
inikube start时minikube logs中报
Error loading config file "/var/lib/minikube/kubeconfig": open
/var/lib/minikube/kubeconfig: permission denied
解决方法:
sudo setenforce 0
再次执行minikube start即可
注意 这个setenforce重启会失败,需要修改/etc/selinux/config 将SELINUX=enforcing
改为 SELINUX=disabled
然后重启即可。
虚拟机内使用minikube start --vm-driver=none装minikube时,报的这个
[preflight] You can also perform this action in beforehand using 'kubeadm config images pull'
error execution phase preflight: [preflight] Some fatal errors occurred:
[ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-apiserver:v1.16.0: output: Trying to pull repository k8s.gcr.io/kube-apiserver ...
Get https://k8s.gcr.io/v1/_ping: dial tcp 64.233.189.82:443: connect: connection refused
, error: exit status 1
实际上就是这个域名k8s.gcr.io不通。
可以执行minikube start --vm-driver=none --image-mirror-country=cn;
来指定国内镜像源。
对于容器的配置文件, docker-compose的还好理解,但是一到k8s,就有很多对象, pods, nodes, services, deployment... 每个基本上都有个yml的定义,其中的参数一看一脸茫然。
还好找到这个:kubectl explain xxx
可以看它的定义
如kubectl explain service --recursive
可以查看service定义的所有定段。
如kubectl explain svc.metadata.uid
可以查看某个字段的定义
当然,k8s官方也有一些examples: https://github.com/kubernetes/examples
先安装macos桌面版的docker
brew install kubernetes-cli --verbose
安装virtualbox
brew cask install minikube
如果有墙内,可以安装阿里云的版本
curl -Lo minikube http://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/releases/v1.1.1/minikube-darwin-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/
启动minikube
minikube start --registry-mirror=https://registry.docker-cn.com
(可选)dashboard
minikube dashboard