# TKE操作笔记01

本文主要介绍了如何入门腾讯云上的TKE(Tencent Kubernetes Engine)服务。

## TKE简介

腾讯云容器服务（Tencent Kubernetes Engine，TKE）是高度可扩展的高性能容器管理服务，您可以在托管的云服务器实例集群上轻松运行应用程序。使用该服务，您将无需安装、运维、扩展您的集群管理基础设施，只需进行简单的 API 调用，便可启动和停止 Docker 应用程序，查询集群的完整状态，以及使用各种云服务。您可以根据资源需求和可用性要求在集群中安排容器的置放，满足业务或应用程序的特定要求。\
腾讯云容器服务基于原生 Kubernetes 提供以容器为核心的解决方案，解决用户开发、测试及运维过程的环境问题、帮助用户降低成本，提高效率。腾讯云容器服务完全兼容原生 Kubernetes API，并扩展了腾讯云的云硬盘、负载均衡等 Kubernetes 插件，同时以腾讯云私有网络为基础，实现了高可靠、高性能的网络方案。

![upload-image](/files/-MN2J96tPIx1Riiex_2M)

## 创建镜像仓库并授权连接github和gitlab

**镜像仓库概述**

镜像仓库用于存放 Docker 镜像，Docker 镜像用于部署容器服务，每个镜像有特定的唯一标识（镜像的 Registry 地址+镜像名称+镜像 Tag）。

**镜像类型**

目前镜像支持 Docker Hub 官方镜像和用户私有镜像(自己生成的业务镜像和一些订制的镜像)。

**授权步骤**

将腾讯云docker镜像仓库和Github授权连接，分为以下四步：

1.开通镜像仓库

2.新建命名空间

3.新建镜像仓库

4.源代码授权

### 腾讯云上开通镜像仓库

![upload-image](/files/-MN2J96umI2yo0OQ8vvb)

### 创建命名空间

![upload-image](/files/-MN2J96vpZddHclt3am0)

在容器服务中，点击镜像仓库会展开下拉框，点击我的镜像，首次使用镜像仓库的用户，需要先开通镜像仓库，输入用户名和密码。

* 用户名：默认是当前用户的账号，是您登录到腾讯云docker镜像仓库的身份。
* 密码：是您登录到腾讯云docker镜像仓库的凭证。

### 新建镜像仓库

![upload-image](/files/-MN2J96w5XKoJ_B2HaMU)

![upload-image](/files/-MN2J96xlkNH8Ym-FmrB)

点击我的镜像，点击我的镜像，点击新建，新建镜像仓库，输入名称，类型选择私有，命名空间选择之前新建的liangfeng，描述可自定义填写该仓库的用途。

* 类型：分为公有和私有，即公有镜像仓库和私有镜像仓库。如果你想将自己仓库下的镜像暴露在公网，且其他人都能够访问，则选择公有；如果只用于个人用户访问，则选择私有。

### 登录仓库上传下载镜像

现在我们举例将busybox的最新镜像上传到仓库并在另外的机器上下载镜像

```
登录仓库
[root@master]# docker login ccr.ccs.tencentyun.com/nwx_registry/busybox -u 100011007491 -p ********

WARNING! Using --password via the CLI is insecure. Use --password-stdin.

WARNING! Your password will be stored unencrypted in /root/.docker/config.json.

Configure a credential helper to remove this warning. See

https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

tag镜像
[root@master]# docker tag busybox:latest ccr.ccs.tencentyun.com/nwx_registry/busybox:latest

push镜像
[root@master]# docker push ccr.ccs.tencentyun.com/nwx_registry/busybox:latest

The push refers to repository [ccr.ccs.tencentyun.com/nwx_registry/busybox]

eac247cb7af5: Pushed

latest: digest: sha256:24fd20af232ca4ab5efbf1aeae7510252e2b60b15e9a78947467340607cd2ea2 size: 527

下载镜像
登录镜像仓库

[root@master]# docker login ccr.ccs.tencentyun.com/nwx_registry/busybox -u 100011007491 -p ********

WARNING! Using --password via the CLI is insecure. Use --password-stdin.

WARNING! Your password will be stored unencrypted in /root/.docker/config.json.

Configure a credential helper to remove this warning. See

https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

下载镜像

[root@master ~]# docker pull ccr.ccs.tencentyun.com/nwx_registry/busybox:latest

latest: Pulling from nwx_registry/busybox

Digest: sha256:24fd20af232ca4ab5efbf1aeae7510252e2b60b15e9a78947467340607cd2ea2

Status: Downloaded newer image for ccr.ccs.tencentyun.com/nwx_registry/busybox:latest
```

### 源代码授权

#### github上源代码授权

![upload-image](/files/-MN2J96y5HWfQZKSWBz3)

![upload-image](/files/-MN2J96z0I52cwn4932R)

github上源代码授权只需要确认授权，并输入github账户密码登录即可

#### gitlab上源代码授权

![upload-image](/files/-MN2J971OiIIqm83hEKd)

![upload-image](/files/-MN2J972z7H8glGSz0UL)

![upload-image](/files/-MN2J973aURueQAZtRA2)

在我的镜像，点击源代码授权，点击立即授权同步 Gitlab代码源。

* 服务地址：Gitlab HTTP或HTTPS地址
* 用户名：登录Gitlab 的用户名。
* 私有Token：连接Gitlab 的Personal Access Token。

至此源授代码完成。

**备注**：如何新建Gitlab Personal Access Token。

![upload-image](/files/-MN2J974_2JZJUDT2uRB)

![upload-image](/files/-MN2J975195s7VRD8gv2)

点击右上角个人资料，点击Setting，点击Access Tokens，输入Token Name和过期时间，勾选api和read\_user或其他权限，点击Create Personal Access Token。之后可以看到生成的Personal Access Token。

## 制作nginx和php基础镜像

### 容器云平台Docker镜像

1.Docker基础镜像：提供基础应用型的Docker软件服务（例如：nginx，php，jdk等），所以dockerhub镜像，公有镜像，自定义私有镜像都可以理解为基础镜像。

2.Docker业务镜像：将Gitlab上的源代码，或通过maven打出来的jar或tar包，添加至基础镜像中，通过构建打包成的Docker业务镜像。

### 通过commit的方式制作镜像

镜像制作步骤如下

1.安装docker软件（yum install docker或apt-get install docker）

2.下载docker centos镜像(docker pull)

3.创建并进入容器（docker run）

4.nginx docker基础镜像制作

5.将容器提交docker基础镜像（docker commit）

6.php docker基础镜像制作

### docker镜像制作

#### 安装docker

```
#  cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)
# yum install docker -y                //安装docker软件
# systemctl start dockerd            //启动docker服务
# systemctl status docker        //查看docker状态，返回active (running)说明成功。
```

![upload-image](/files/-MN2J976spgGVeI8zKjE)

#### 下载docker镜像

```
[root@VM_0_13_centos ~]# docker pull centos:7.5.1804

7.5.1804: Pulling from library/centos

5ad559c5ae16: Pull complete

Digest: sha256:7a45e4a1efbaafc1d9aa89925b6fdb33288a96d35ea0581412316e2f0ad3720a

Status: Downloaded newer image for centos:7.5.1804

docker.io/library/centos:7.5.1804

[root@VM_0_13_centos ~]# docker images| grep centos

centos                          7.5.1804            cf49811e3cdb        14 months ago       200MB

REPOSITORY是仓库名，TAG 是标签，IMAGE ID是镜像ID，CREATED是镜像创建到至今的时间，SIZE是镜像大小
```

![upload-image](/files/-MN2J977jnf-n4H3qzyW)

#### 启动容器并进入容器

```
[root@VM_0_13_centos ~]# docker run -it centos:7.5.1804 /bin/bash
```

#### 制作nginx镜像

```
[root@34c805aa9433 /]# yum install epel-release -y
[root@34c805aa9433 /]# yum install nginx net-tools -y
[root@34c805aa9433 /]# vi  /etc/nginx/nginx.conf  //修改nginx配置文件，日志路径可跟进自身需求设置
```

1.将user nginx;修改成user root; (容器中nginx 要以root用户运行)

2.添加daemon off; （nginx和php等应用型软件安装在容器里面，必须要已守护进程的方式运行）

3.设置worker\_processes参数为auto

4.设置access\_log对应的路径为/data/logs/nginx/access.log

配置文件如下

![upload-image](/files/-MN2J978je6VX1XtUnch)

\[root\@34c805aa9433 nginx]# cat /etc/nginx/conf.d/localhost.conf //日志路径可跟进自身需求设置

添加localhost.conf配置文件

1.设置为nginx 80端口启动

2.server\_name为wordpress.tencent.com localhost; （wordpress.tencent.com是wordpress的访问域名，根据业务需求设置）

3.error\_log对应路径为/data/logs/nginx/wordpress.tencent.com\_error.log

4.wordpress网站根目录是/data/www/wordpress（这个目录暂时不创建，之后会讲解制作Docker业务镜像将源码添加至/data/www/wordpress目录）

5.设置fastcgi\_pass unix:/dev/shm/php-fpm.sock; （以nginx和php-fpm 使用uninx socket通信）

![upload-image](/files/-MN2J979v97x73Cm5MjO)

\[root\@34c805aa9433 nginx]# mkdir /data/logs/nginx -p //创建日志目录

#### 将容器提交为镜像

查看容器id,可以新开窗口或者执行ctrl+p+q（该命令退出容器但是不会关闭容器）

![upload-image](/files/-MN2J97AlgsbIDjCNTLw)

CONTAINER ID是容器ID，IMAGE是使用的镜像，COMMAND是容器启动运行的命令，CREATED是容器创建到运行至今时间，STATUS是容器当前的状态，PORTS是容器运行的端口，NAMES是容器的名称。

```
[root@VM_0_13_centos ~]# docker commit 34c805aa9433 my-nginx:v1  

sha256:e2710bd032cb580b224a1cb794ac6bde04685adeaccdc6b064ce4a5b7c8a09a4

[root@VM_0_13_centos ~]# docker images | grep my-nginx
```

![upload-image](/files/-MN2J97B60oRfE13tcFu)

### php镜像的制作

```
1.首先利用docker run启动一个centos容器 （参考步骤3.3.3）

[root@VM_0_13_centos ~]# docker run -it centos:7.5.1804 /bin/bash

2.在容器中进行php的安装和配置

[root@44a713255c35 /]# yum install epel-release -y

[root@44a713255c35 /]# rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

[root@44a713255c35 /]# yum install php70w php70w-fpm php70w-cli php70w-common php70w-devel php70w-gd php70w-pdo php70w-mysql php70w-mbstring php70w-bcmath php70w-xml php70w-pecl-redis php70w-process php70w-intl php70w-xmlrpc php70w-soap php70w-ldap php70w-opcache -y     //安装php-fpm及扩展

# vi /etc/php-fpm.conf

error_log = /data/logs/php/error.log       //替换路径

daemonize = no     //设置php-fpm已守护进行方式运行
```

![upload-image](/files/-MN2J97CDjc_nkTJaMZS)

```
# vi /etc/php-fpm.d/www.conf                             //日志路径可跟进自身需求设置

user = root                          //将user = apache修改成user = root

group = root                       //将group = apache修改成group = root

listen = /dev/shm/php-fpm.sock                 //将listen = 127.0.0.1:9000 修改成 listen = /dev/shm/php-fpm.sock

listen.owner = root                                     //将listen.owner = user修改成listen.owner = root

listen.group = user                                     //将listen.group = user修改成listen.group = root

slowlog = /data/logs/php/www-slow.log                  //设置slow日志路径为/data/logs/php

php_admin_value[error_log] = /data/logs/php/www-error.log   //设置error日志路径为/data/logs/php
```

![upload-image](/files/-MN2J97DrMjJdfAQ9AIv)

```
# mkdir /data/logs/php -p           //创建php日志目录

3.最后通过commit命令提交成本地镜像，请参考上面第3.3.5步（将容器提交成docker基础镜像）

[root@VM_0_13_centos ~]# docker commit 44a713255c35 my-php:v1

sha256:42b5502112cc5870c76e932e8a986363c2256ef5b92fa0f3ab60ff9865c24385

[root@VM_0_13_centos ~]# docker images | grep my-php

my-php                          v1                  42b5502112cc        17 seconds ago      507MB
```

## 上传制作的镜像到腾讯云仓库

### 创建镜像仓库

![upload-image](/files/-MN2J97ETrvVFrMyOMRD)

### 查看指定上传镜像

![upload-image](/files/-MN2J97FtUz8A4RD-Dw-)

### 上传镜像

```
[root@VM_0_13_centos ~]# sudo docker login --username=100011007491 ccr.ccs.tencentyun.com

Password:

WARNING! Your password will be stored unencrypted in /root/.docker/config.json.

Configure a credential helper to remove this warning. See

https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

[root@VM_0_13_centos ~]# docker tag my-nginx:v1 ccr.ccs.tencentyun.com/nwx_registry/my-nginx:v1

[root@VM_0_13_centos ~]# docker push ccr.ccs.tencentyun.com/nwx_registry/my-nginx:v1

The push refers to repository [ccr.ccs.tencentyun.com/nwx_registry/my-nginx]

48d696542a84: Pushed

4826cdadf1ef: Pushed

v1: digest: sha256:f7261062bf7fab57b1501d7fd9282b9d1501ad14ccbe9feb9236d00fa6288cf7 size: 741

[root@VM_0_13_centos ~]# docker tag my-php:v1 ccr.ccs.tencentyun.com/nwx_registry/my-php:v1

[root@VM_0_13_centos ~]# docker push ccr.ccs.tencentyun.com/nwx_registry/my-php:v1

The push refers to repository [ccr.ccs.tencentyun.com/nwx_registry/my-php]

674c5524920e: Pushed

4826cdadf1ef: Mounted from nwx_registry/my-nginx

v1: digest: sha256:216a1bea5b1436852ba67dfff57be38811a4a32478f799df39753de4e66e2faa size: 742
```

![upload-image](/files/-MN2J97GvbpmSzpVGl7P)

![upload-image](/files/-MN2J97HdWWeuK0u2gIQ)

至此，我们已将nginx和php两个docker基础镜像push至腾讯云仓库。

Nginx基础镜像地址：ccr.ccs.tencentyun.com/nwx\_registry/my-nginx:v1

PHP基础镜像地址：ccr.ccs.tencentyun.com/nwx\_registry/my-php:v1

## 自动化构建生成springboot业务镜像

**腾讯容器云的构建功能（持续集成）**

1.将giltab源代码和Dockerfile文件拉取到本地

2.基于Dockefile文件，制作Docker业务镜像（Dockerfile会引用腾讯云镜像仓库中的Docker基础镜像，将源代码添加至基础镜像中，打包成Docker业务镜像）

3.构建又分自动和手动，自动构建：当用户往代码仓库发起push操作时，如果符合自动构建规则，那么就会在腾讯云容器平台上进行容器镜像的自动构建，并将构建出来的容器镜像自动推送到腾讯云容器镜像仓库中。手动构建：用户需要人为手动进行触发构建。

**构建（持续集成）步骤：**

1.Dockerfile文件上传至github

2.构建配置

3.构建日志内容说明

4.构建镜像验证

### Dockerfile上传到github上

![upload-image](/files/-MN2J97I9xDgFjn-q1Ka)

Dockerfile的内容

![upload-image](/files/-MN2J97J9Mm-5e2-qtfa)

第1行： FROM引用DockerHub上的maven基础镜像

第2行： 通过MAINTAINER 说明作者和作者邮箱地址；

第3行：将代码拷贝到镜像中用于后续打包

第4-5行：执行打包命令，并将jar拷贝到指定目录便于后续运行

第6行：EXPOSE声明服务端口。（容器内的服务端口，这里是springbboot的8080）

第7行：通过ENTRYPOINT设置业务镜像，开机运行springboot服务

说明：开头FROM和MAINTANER必须要指定；容器业务端口必须要用EXPOSE声明；开机自启动必须要用ENTYPOINT；由于Docker镜像是基于”层”，Dockerfile的内容越精简越好。

### 构建配置

![upload-image](/files/-MN2J97KNzvT3zqZ_tOS)

![upload-image](/files/-MN2J97LN39i-RSwegfj)

![upload-image](/files/-MN2J97MMqieKkVksx19)

在我的镜像中，点击进入构建配置，填写好构建参数，然后点击完成。

1.代码源选择github，Repository选择test-springboot（github上的项目）

2.触发方式勾选分为：添加新的Tag时触发和提交代码到分支时触发（意思是我们在gitlab上添加tag或进行提交代码操作，容器云平台会自动拉取代码，进行打包构建）

3.镜像版本命名规范自定义填写，分支/标签，更新时间，commit号根据需求勾选。（若都勾选，例如：构建成业务镜像名称是springboot-master-201907261035-1d096112584d036167c1cd50a335c0a58ff43f6a，springboot

是命名规则，master

是gitlab上的分支号，201907261035是生成业务镜像的当前时间，1d096112584d036167c1cd50a335c0a58ff43f6a是每次在github提交后生成的commit号）

4.覆盖镜像版本：生成的镜像同时会包含该tag。（可以理解为镜像别名，多打个tag）

5.Dockerfile路径：Dockerfile在文件源代码中的路径。（根据步骤1中Dockerfile和代码在同级目录，所以直接写Dockerfile即可）

6.构建目录：构建时的工作目录。（我这里填写的".",意思是执行当前目录下的Dockerfile文件）

点击完成，会跳转到镜像构建页面

![upload-image](/files/-MN2J97NS8KTt-l2fM85)

![upload-image](/files/-MN2J97OROuSUzi_ntIO)

我先在github上提交代码，然后在镜像构建，执行浏览器F5刷新，出现了一条构建记录，点击查看日志，可以看到右侧的构建日志内容

![upload-image](/files/-MN2J97PCyYvhUoTumtv)

### 构建日志内容说明

![upload-image](/files/-MN2J97QVHbm7vhWOXzB)

![upload-image](/files/-MN2J97RVCz_dUmvSidg)

![upload-image](/files/-MN2J97SabApnP-FRLme)

![upload-image](/files/-MN2J97TmXGpCn41uh9q)

![upload-image](/files/-MN2J97UhQ98nby-hluJ)

1.可以观察到，图中框选Step 1/6至Step 6/6 都是Dockerfile的文件内容，表示正在执行Dockerfile文件语句。

2.第1304行：表示docker build成功。

3.第1301行：构建成业务镜像的地址是，ccr.ccs.tencentyun.com/nwx\_registry/springboot:springboot-master-202006011634-d36b9ed0b51a80ed36477fb35d53012e1a05fd4c

4.第1304行：Build successfully，表示构建成功。

5.到镜像仓库下可以看到镜像已经上传成功

至此springboot业务镜像构建成功，同理，其他镜像构建也可以参照如上步骤

## 手动构建docker镜像

手动构建方式

1.指定源码分支构建

2.指定commit号构建

3.使用Dockerfile进行构建

### 指定源码分支构建

![upload-image](/files/-MN2J97V17onvXI9sDGq)

![upload-image](/files/-MN2J97W2WMh-1bozJKV)

在镜像构建中，点击立即构建，会弹出立即构建镜像界面，构建方式选择指定源码分支构建，镜像版本（可自定义填写，这里我填写v1），分支列表（当前需要构建代码源中的分支，这里我选的master），最后点击构建。在镜像构建中，会多出一条构建记录。

![upload-image](/files/-MN2J97Xp_U-akYJdYUd)

### 指定commit id构建

获取commit id

![upload-image](/files/-MN2J97YKzoc13xfXwy-)

![upload-image](/files/-MN2J97ZFyl83PQDrCSb)

在镜像构建中，点击立即构建，会弹出立即构建镜像界面，构建方式选择指定commit号构建，填写镜像版本(我这里设置的是v2)和Git commit号，最后点击构建。

![upload-image](/files/-MN2J97_We4nEX3f-RAS)

### 指定Dockerfile构建

![upload-image](/files/-MN2J97a-jIL-yR8HBDm)

![upload-image](/files/-MN2J97b8Su1d-qsiD6B)

在镜像构建中，点击立即构建，会弹出立即构建镜像界面，构建方式选择使用dockerfile进行构建，填写镜像版本和Dokcerfile文件内容，最后点击构建。 这里的构建来源是dockerfile构建，是获取不到github源码文件，所以没法进行java源码打包，Dockerfile构建是用于自定义dockerfile，可从第三方拉取镜像，自定义docker业务镜像，一般采用Dockerfile的方式构建都是构建一些基础镜像，不设计源代码或者其他本地文件的构建

修改下Dockerfile，让构建时候不涉及文件的拷贝

![upload-image](/files/-MN2J97cuR0xq6pl48C1)

![upload-image](/files/-MN2J97dRN7Lf9tbpycq)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.niewx.cn/20200601tke-cao-zuo-bi-ji-01.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
