minikube安装、kubectl命令和初体验

在学习k8s的过程中,不可避免的需要自己动手做实验,通常k8s需要3台机器,一台作为master节点,另外两个作为node节点,我以前不知道有minikube的时候,每次开3台虚拟机,这对电脑要求是比较高,同时也不方便,这种3台的集群搭建起来也更麻烦和耗时,建议大家在学习k8s的时候就用minikube来做实验,像istio、knative和kubevela都可以在minikube上运行。

注意:k8s和minikube的前提都是已经安装了docker

minikube安装

安装kubectl

先安装依赖的软件

apt update
apt install -y apt-transport-https
复制代码

下载并添加key

curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
复制代码

上面命令中最后有个-,这个意思是apt-key add命令的参数来源自管道符左边的输出(即标准输出流),管道左边是curl这个命令是获取远程资源文件的内容并输出到标准输出流,这些可以参考我之前发的《Linux必会命令》和《Shell基础》

添加apt源,其中kubernetes-xenialxenial要和自己操作系统的内核保持一致

cat > /etc/apt/sources.list.d/kubernetes.list << EOF
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
复制代码

开始安装

apt update
apt install kubectl
复制代码

下载minikube

前往github搜索minikube,第一个就是,进入release页面,找自己需要的版本下载,下载链接如下(这是1.16.0版本):

github.com/kubernetes/…

下载好之后解压、添加权限并移到bin目录

chmod u+x minikube
mv minikube /usr/local/bin/
复制代码

到这已经下载配置完毕

启动并下载镜像

minikube start --image-mirror-country=cn --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers --kubernetes-version=v1.18.3 --vm-driver=none
复制代码
  • minikube start 启动一个minikube
  • --image-mirror-country=cn 指定镜像源国家,cn表示中国
  • --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers 指定镜像源,这里设置的是阿里云
  • --kubernetes-version=v1.18.3 指定k8s版本,这个版本要看我们下载的minikube版本支持哪些k8s版本,这种官网肯定都有,自己找一下,我的minikube版本v1.16.0支持k8s版本v1.18.3
  • --vm-driver=none 不创建虚拟机
  • --memory=2048mb 指定使用多大内存

执行命令后要等很长一段时间,minikube在下载k8s所需要的镜像和kubelet以及kubeadm,我们指定了镜像源,否则在国内下载不了gcr仓库的镜像。

当终端上提示Done! kubectl is now configured to use ...的时候就启动成功了,下一次再执行minikube start时就很快了

注意:指定--vm-driver=none时需要安装操作系统中已经安装conntrack,否则会报requires conntrack的错误

apt install conntrack
复制代码

相关命令

minikube的常用命令如下:

命令 说明
minikube -h 查看minikube命令帮助
minikube start 启动
minikube stop 停止,启动后可通过这个命令关闭
minikube delete 删除
minikube dashboard 启动dashboard,在k8s中dashboard还要自己通过helm安装,在minikube中一个命令就可以,很方便

对于minikube dashboard命令启动dashboard后,在本机之外是访问不到的,需要通过kubectl proxy设置代理,如下:

kubectl proxy --port=8001 --address='服务器IP' --accept-hosts='^.*' &
复制代码

访问dashboard:http://服务器IP:8001/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/#/overview?namespace=default

kubectl

kubectl是我们管理k8s最常用的命令,所以在体验minikube之前也要了解这个命令的用法,这个命令的子命令非常多,以下只能列出一些常用的,更多的命令可通过help查看

get

用于查看所有服务和资源

命令 说明
kubectl get ns 查看所有命名空间
kubectl get all 查看指定命名空间下的所有服务,通过-n指定命名空间,如kubectl get all -n kube-system,以下都可以通过-n来指定命名空间
kubectl get po 查看指定命名空间下的所有pod,默认是default命名空间,可通过-w来监听变化,通常用于查看新的pod是否启动成功,可通过--show-labels查看各个pod的标签
kubectl get svc 查看service
kubectl get cm 查看config map

所有的查看命令都可以直接指定具体的服务名(资源名),精确的查找到某一个,再指定-o来输出详情,如下:

// 查看kube-system命名空间下,叫xxx的pod,并输出为yaml格式
kubectl get po -n kube-system xxx -o yaml
复制代码

apply

用于应用yaml文件

kubectl apply -f xxx.yml
复制代码

在yaml文件中可以定义各种资源,如namespace, configmap, service, deployment, replicaset等,对于这种yaml文件执行apply子命令就可以了,不用自己一个一个去创建

create

用于创建服务和资源

命令 说明
kubectl create ns xxx 创建以xxx命名的命名空间
kubectl create cm xxx –from-file=yyy 创建ConfigMap,--from-file=yyy这个参数是可选项(不指定也可以创建成功),如果指定则yyy可以是文件也可以是目录,如果是目录,则加载目录下所有配置文件,以文件名为key,以文件内容为值
kubectl create secret tls xxx 创建Secret,如kubectl create secret tls xxx --key xxx.key --cert xxx.crt,其中tls是secret的类型,xxx为secret名称

edit

用于编辑已经存在的服务和资源

命令 说明
kubectl edit cm xxx 编辑xxx这个ConfigMap

delete

用于删除已经存在的服务和资源

命令 说明
kubectl delete ns xxx 删除xxx这个命名空间
kubectl delete po xxx 删除xxx这个pod,可通过-n指定命名空间
kubectl delete po –all 删除指定命名空间下的所有pod,其他如svc、deployment、rs等都可以–all删除全部
kubectl delete svc xxx 删除service
kubectl delete rs xxx 删除ReplicaSet
kubectl delete -f xxx.yml 通过yaml文件来删除,这种删除方式是最常用的,在使用k8s的时候一定要注意把yaml文件备份好

删除子命令还有很多就不一一列举了,都是指定要删除什么类型的服务,再指定名称和命名空间即可

describe

查看详细信息,经常在pod启动失败时用来查看原因,比如镜像下载失败等

kubectl describe po -n kube-system xxx
复制代码

logs

查看pod的日志,也可以查看pod中指定容器的日志,通常用来查找具体问题,如网络不通和程序输出的日志等

kubectl logs -n kube-system xxx
kubectl logs -n kube-system xxx -f
复制代码

指定容器,通过-c指定pod中的容器名,c是container的意思

kubectl logs -n kube-system xxx -f -c yyy
复制代码

初体验之部署nginx

现在来动手实现一个nginx的部署,体验一下超长的yaml

以下是nginx的yaml文件,需要一个Deployment和一个Service

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-v1
spec:
  replicas: 1
  selector:
    matchLabels: # 新版本中这个属性是必须的,用来匹配下面template中定义的metadata.labels
      name: nginx
      version: v1
  template:
    metadata:
      # 给pod添加标签,这里分别添加了name=nginx, version=v1这两个标签
      labels:
        name: nginx
        version: v1
    spec:
      containers:
      - name: nginx # 容器名
        image: nginx # 镜像
        imagePullPolicy: IfNotPresent # 镜像拉取的策略,IfNotPresent表示如果本地没有就从仓库拉取新的镜像
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  # Service的类型
  type: ClusterIP
  # 通过selector选择pod
  selector:
    name: nginx
  ports:
  - name: http
    port: 80
    targetPort: 80
    protocol: TCP
复制代码

以上的yaml文件中定义了一个Deployment和一个Service,其中Deployment负责部署pod,spec.template就是pod的定义,而spec.replicas设置需要部署几个nginx的pod

Service中spec.selector用于选择pod,只要pod的标签中有name=nginx即可被选中,这样正好可以选中上面Deployment部署的nginx的各个pod,如果pod有多个,就自动实现了负载均衡,不过这种负载均衡实现的效果并不好,以后要用其他方案来代替

创建以上的yaml文件后,执行命令应用到k8s上,默认是安装在default命名空间下,具体装到哪个命名空间下,可在yaml文件中metadata下指定namespace

kubectl apply -f xxx.yml
复制代码

之后可通过kubectl命令查看

kubectl get po
kubectl get deployment
kubectl get svc
复制代码

其中kubectl get svc可查看到IP,可以直接curl这个IP查看nginx是否有响应

kubectl get svc

NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP   171d
nginx        ClusterIP   10.108.164.139   <none>        80/TCP    9m40s

curl 10.108.164.139
复制代码

curl输出nginx的欢迎页面就说明部署成功了,只是目前在本机外部还访问不了,这个以后再说

删除nginx部署:

kubectl delete -f xxx.yml
复制代码

再强调一句:k8s中yaml文件全留着,启动和删除都可通过yaml文件来实现

docker-compose.yml转换

k8s的yaml文件都很长,平时自己也有很多docker-compose.yml文件,如果能够有一个工具将docker-compose.yml转成k8s的yaml就很方便了,k8s就提供了这样一个工具,叫kompose

安装kompose

从kompose的github上下载,链接 是https://github.com/kubernetes/kompose/releases,下载适合自己操作系统的压缩包,解压后得到一个可执行文件,将其移到bin目录下

mv kompose-linux-amd64 /usr/local/bin/
复制代码

接下来就可以进行转换了,先准备一个简单的docker-compose.yml

version: '3.1'
services:
  nginx:
    restart: always
    image: nginx
    container_name: nginx
    ports:
      - 80:80
复制代码

进入该docker-compose.yml文件所在目录下执行转换

kompose-linux-amd64 convert
复制代码

转换成功后就会得到一些k8s的yaml文件,比自己手写快多了

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享