阅读 2056

手把手带你玩转k8s-集群创建和Hello World

前言

因为公司业务发展需要,现在开始陆陆续续将swarm上的服务转到k8s了。而我也终于有机会开始k8s的学习(caikeng)之旅。这里不会对swarm和k8s进行对比,反正知道k8s比swarm更香就对了。本系列教程主要是面向想入门k8s但又无门的开发小伙伴。

环境搭建

本文的环境搭建并不是真的亲手去搭建,而是使用云平台的容器服务去创建k8s集群。目地很简单,专业的事就让专业的人去做。我们能把k8s使用得顺手就可以了,维护就让云平台帮做吧。当然主要原因还是想让大家能更快的上手使用k8s。云供应商很多,下面会以阿里云为例,讲述如何创建k8s集群。

准备工作

  • 准备一台ECS服务器-这里叫他小A

    非必需,但是建议买一台,可以选一些比较偏远的地域购买,这样会有优惠,比如华北3(张家口)

  • 服务器配置

    建议最低配置:

    2核4G内存

    网络使用按量付费

  • 操作系统

    建议Centos7.7

  • 安装软件

    docker-必装,本文就不说了,网上教程一大把。

    kubectl-k8s管理工具,下面教程会说。

    nginx-后续教程会涉及,所以建议安装

  • 入手一个域名,这个也很便宜

安装Kubectl

源配置

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
复制代码

安装

[root@mldong ~]# yum install -y kubectl
复制代码

创建集群

搜索容器服务

image-20200702110539909

选择创建集群

image-20200702110725363

集群配置

选择Kubernetes托管版,这里注意一下地域,选择和上面说的ECS服务器小A同一个地域,这样就在同一个内网内,可以相互访问。

image-20200702111146250

image-20200702111228299

工作节点配置

这里使用新增实例、按量付费,然后选择一个合适的配置,这里选择较为便宜的,ecs.t6-c1m2.large。

image-20200702111432457

最低要两台,操作系统可以Centos7.7,登录方式建议使用密钥的方式,也就是前面那个ECS服务器小A的公钥,如果没有,请自行创建。ssh-keygen -t rsa,三次回车。

image-20200702111514705

组件配置

使用内网,这样便宜。对外访问使用小A就可以了。存储插件选择CSI。

image-20200702111621242

确认配置

现在选的这个配置算是较为便宜的了,4毛多一小时,比去网咖便宜。按量收费除了ECS服务器外,还有负载均衡-私网的,后面会教如何关闭。

image-20200702112205473

集群创建检查,如果没有通过,会有教程提示,按要求做就可以了。

image-20200702111800222

集群创建中

image-20200702112312557

集群创建成功

image-20200702112932338

查看集群信息

image-20200702113218223

image-20200702113329235

KubeConfig配置

image-20200702113414755

复制KubeConfig
[root@mldong ~]# cat /root/.kube/config
复制代码
连接集群测试
[root@mldong nginx]# kubectl get node
NAME                           STATUS   ROLES    AGE   VERSION
cn-zhangjiakou.172.26.22.118   Ready    <none>   83m   v1.16.9-aliyun.1
cn-zhangjiakou.172.26.22.119   Ready    <none>   83m   v1.16.9-aliyun.1
复制代码

集群安全组配置

查看云服务器实例

刚新创建了两个实例

image-20200702113940049

加入与小A同一个安全组

image-20200702114347169

image-20200702114451373

验证安全组是否配置成功

正常进入集群,则成功,不过其实并不需要进入集群,只是验证一下。

[root@mldong .kube]# ssh root@worker1 echo 666
666
复制代码

镜像服务配置

因为创建的是内网的集群,外网镜像是不能直接拉取的,所以需要先配置内网能访问的镜像服务

搜索容器镜像服务

image-20200702115331703

创建命名空间

image-20200702115727413

创建镜像仓库

image-20200702115409800

这里注意地域,要和小A的一致

image-20200702115535004

访问凭证密码设置

image-20200702120324695

查看仓库详情

image-20200702120025340

要记一下内网的访问地址,即专有网络

image-20200702120239436

开始Hello World

先制作一个镜像

拉取最新的nginx镜像

[root@mldong yaml]# docker pull nginx:latest
latest: Pulling from library/nginx
8559a31e96f4: Pull complete 
8d69e59170f7: Pull complete 
3f9f1ec1d262: Pull complete 
d1f5ff4f210d: Pull complete 
1e22bfa8652e: Pull complete 
Digest: sha256:21f32f6c08406306d822a0e6e8b7dc81f53f336570e852e25fbe1e3e3d0d0133
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
复制代码

给镜像添加标签

[root@mldong yaml]# docker tag nginx:latest registry-vpc.cn-zhangjiakou.aliyuncs.com/mldong/java/nginx:latest
复制代码

登录镜像仓库

docker login --username=524719755@qq.com registry-vpc.cn-zhangjiakou.aliyuncs.com
复制代码

用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。

您可以在访问凭证页面修改凭证密码。

将镜像推送到镜像仓库

[root@mldong yaml]# docker push registry-vpc.cn-zhangjiakou.aliyuncs.com/mldong/java/nginx:latest
The push refers to repository [registry-vpc.cn-zhangjiakou.aliyuncs.com/mldong/java/nginx]
f978b9ed3f26: Pushed 
9040af41bb66: Pushed 
7c7d7f446182: Pushed 
d4cf327d8ef5: Pushed 
13cb14c2acd3: Pushed 
latest: digest: sha256:0efad4d09a419dc6d574c3c3baacb804a530acd61d5eba72cb1f14e1f5ac0c8f size: 1362
复制代码

使用kubectl发布一个nginx服务

新增个ns.yaml文件

[root@mldong yaml]# cat ns.yaml 
apiVersion: v1
kind: Namespace
metadata:
  name: mldong-test

复制代码

增加一个nginx_deployment.yaml文件

[root@mldong nginx]# cat nginx_deployment.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-pod
  namespace: mldong-test
spec:
  selector:
    matchLabels:
      app: nginx-pod
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx-pod
    spec:
      containers:
        - name: nginx
          image: registry-vpc.cn-zhangjiakou.aliyuncs.com/mldong/java/nginx:latest
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 80
              name: port
              protocol: TCP

复制代码

增加一个nginx_service.yaml

[root@mldong nginx]# cat nginx_service.yaml 
apiVersion: v1
kind: Service
metadata:
  name: nginx-nodeport
  namespace: mldong-test
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 80
    nodePort: 32180 
  selector:
    app: nginx-pod
复制代码

创建一个命名空间

[root@mldong yaml]# kubectl apply -f ns.yaml 
namespace/mldong-test created
复制代码

查看所有命名空间

[root@mldong yaml]# kubectl get ns
NAME              STATUS   AGE
default           Active   44m
kube-node-lease   Active   44m
kube-public       Active   44m
kube-system       Active   44m
mldong-test       Active   87s

复制代码

创建一个pod

[root@mldong nginx]# kubectl apply -f nginx_deployment.yaml 
deployment.apps/nginx-pod created
复制代码

查看指定命名空间下的pod

[root@mldong nginx]#  kubectl get pods -n mldong-test
NAME                         READY   STATUS              RESTARTS   AGE   IP       NODE                           NOMINATED NODE   READINESS GATES
nginx-pod-66bbff87f9-vzlvs   0/1     ContainerCreating   0          3s    <none>   cn-zhangjiakou.172.26.22.119   <none>           <none>
[root@mldong nginx]#  kubectl get pods -n mldong-test
NAME                         READY   STATUS    RESTARTS   AGE   IP           NODE                           NOMINATED NODE   READINESS GATES
nginx-pod-66bbff87f9-vzlvs   1/1     Running   0          15s   172.20.0.7   cn-zhangjiakou.172.26.22.119   <none>           <none>
复制代码

创建一个服务

[root@mldong nginx]# kubectl apply -f nginx_service.yaml 
service/nginx-nodeport created
复制代码

查看指定命名空间下的service

[root@mldong nginx]# kubectl get service -n mldong-test
NAME             TYPE       CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
nginx-nodeport   NodePort   172.21.1.95   <none>        80:32180/TCP   76s
复制代码

验证服务是否正常

访问任一节点

172.26.22.118 worker1 172.26.22.119 worker2

[root@mldong nginx]# curl worker1:32180
[root@mldong nginx]# curl worker2:32180
复制代码

正常返回如下

<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
复制代码

到此,Hello world就结束了,为了省钱,下面得教一下如何停止或释放服务了。停止和释放后就不收钱了。

停用设置

停用实例

实例停用有两种方式,一种是仅停止不收费方式,另一种是完全释放实例的方式。如果经常要使用要练习,建议采用停止不收费的方式,这样下次就不需要重建集群。

停止不收费方式

单个停止

实例状态->停止

image-20200702141832768

image-20200702141859929

批量停止

image-20200702172641967

停止中

image-20200702142038790

已停止

image-20200702162009309

停用负载均衡

搜负载均衡

image-20200702172335286

image-20200702171630946

完全释放实例资源

实例释放设置前要先修改实例释放保护-取消

image-20200702141140823

image-20200702141233847

实例释放设置

实例状态->释放设置

image-20200702140929526

image-20200702141728643

ECS服务器实例停止后,想再次使用,重新启动即可。启动后会重新计费。

账单名细

image-20200702170940388

image-20200702171353182

小结

本文使用阿里云的容器服务快速创建Kubernetes托管版 ,目地是为了更快地去学习k8s的应用。而且按量付费,费用也不会太高。比升级自己的电脑便宜。当然,除了阿里云,像腾讯云和华为云也会有类似的服务。这里只是给大家一个思路。真的,不要老想着自建,不是专业的人员,真的很难。后续的k8s系列的文章,也会在现在这个集群的基础上进行。希望有小伙伴一起入坑学习。

相关文章

手把手带你玩转k8s-ConfigMap与持久化存储

手把手带你玩转k8s-完整的发布一个可对外访问的服务

手把手带你玩转k8s-docker进阶Dockerfile与docker-compose

手把手带你玩转k8s-一键部署springboot项目

手把手带你玩转k8s-一键部署vue项目

手把手带你玩转k8s-常用对象详解

手把手带你玩转k8s-jenkins安装与流水线

手把手带你玩转k8s-jenkins流水线语法

手把手带你玩转k8s-jenkins流水线发布springboot项目

手把手带你玩转k8s-jenkins流水线发布vue项目

手把手带你玩转k8s-健康检查之存活探针与就绪探针

手把手带你玩转k8s-win10上搭建k8s集群

手把手带你玩转k8s-win10的k8s上搭建开发环境服务