-1

在 openshift3 我托管 Java 应用程序。我已经创建了 MYSQL 并删除了,现在我正在尝试再次创建 MYSQL,但它显示错误“容器 MYSQL 经常崩溃”。我附上图片以供参考。 "SQLCrash_Image" "ConsoleOutput_Image" 新图像:- "Monitoring&Events_Image" "Logs_image" "Monitoring&Events_Image2" 谁能帮助解决这个问题?

日志:

D:\Openshift ocCommands>oc get pods
NAME             READY     STATUS             RESTARTS   AGE
mysql-2-deploy   0/1       Error              0          9h
mysql-3-9rmt3    0/1       CrashLoopBackOff   4          2m
mysql-3-deploy   1/1       Running            0          2m

D:\Openshift ocCommands>oc logs mysql-3-9rmt3
error: Invalid MySQL username
You must either specify the following environment variables:
MYSQL_USER (regex: '^[a-zA-Z0-9_]+$')
MYSQL_PASSWORD (regex: '^[a-zA-Z0-9_~!@#$%^&*()-=<>,.?;:|]+$')
MYSQL_DATABASE (regex: '^[a-zA-Z0-9_]+$')
Or the following environment variable:
MYSQL_ROOT_PASSWORD (regex: '^[a-zA-Z0-9_~!@#$%^&*()-=<>,.?;:|]+$')
Or both.
Optional Settings:
MYSQL_LOWER_CASE_TABLE_NAMES (default: 0)
MYSQL_LOG_QUERIES_ENABLED (default: 0)
MYSQL_MAX_CONNECTIONS (default: 151)
MYSQL_FT_MIN_WORD_LEN (default: 4)
MYSQL_FT_MAX_WORD_LEN (default: 20)
MYSQL_AIO (default: 1)
MYSQL_KEY_BUFFER_SIZE (default: 32M or 10% of available memory)
MYSQL_MAX_ALLOWED_PACKET (default: 200M)
MYSQL_TABLE_OPEN_CACHE (default: 400)
MYSQL_SORT_BUFFER_SIZE (default: 256K)
MYSQL_READ_BUFFER_SIZE (default: 8M or 5% of available memory)
MYSQL_INNODB_BUFFER_POOL_SIZE (default: 32M or 50% of available memory)
MYSQL_INNODB_LOG_FILE_SIZE (default: 8M or 15% of available memory)
MYSQL_INNODB_LOG_BUFFER_SIZE (default: 8M or 15% of available memory)

 For more information, see https://github.com/sclorg/mysql-container
4

1 回答 1

1

如何诊断崩溃循环

这是我建议遵循的步骤。如果您可以在每个步骤中提供日志输出,这将有助于我们查看问题。

第一步:安装OC客户端

到目前为止,您只能通过 UI,您需要oc客户端进行更深入的故障排除。

首先,通过 Web 界面登录到您的集群。选择屏幕右上角的问号,然后选择“命令行工具”:

OpenShift 的 CLI 指令屏幕截图

按照说明下载并安装客户端。

第 2 步:显示当前的 pod

获得客户端并登录后,运行:

oc get pods

其中应该显示 pod 名称列表。请在您的问题中粘贴输出内容(作为文本,而不是图像!)

第 3 步:找到崩溃的 pod 并获取其日志

您将有一个正在崩溃的 pod,它将被称为类似mysql-2-6c009. 我们需要它的日志。粘贴以下输出:

oc logs mysql-2-6c009

第 4 步:如果找不到 pod,请重新部署它

如果由于部署失败而无法再看到 pod,请尝试运行:

oc rollout latest mysql

然后oc get pods再次运行,直到看到崩溃的 pod。

第五步:解决问题!

日志显示了问题,您没有指定正确设置数据库所需的环境变量。如果我们查看 ]OpenShift - MySQL 上的文档(https://docs.openshift.com/enterprise/3.0/using_images/db_images/mysql.html#environment-variables),我们可以看到相同的结果:

您必须指定用户名、密码和数据库名称。如果您未指定所有三个,则 pod 将无法启动,OpenShift 将不断尝试重新启动它。

要设置值,请尝试以下操作:

oc set env dc/mysql MYSQL_USER=user MYSQL_PASSWORD=P@ssw0rd MYSQL_DATABASE=db1

这将使用变量更新您的部署配置。如果您已将其配置为在配置更改时更新,它应该自动重新部署,如果没有,请运行:

oc rollout latest

将来,您可以使用首先设置的环境变量来创建应用程序,如下所示:

oc new-app -e \
MYSQL_USER=<username>,MYSQL_PASSWORD=<password>,MYSQL_DATABASE=<database_name> \
registry.access.redhat.com/openshift3/mysql-55-rhel7

有关详细信息,请参阅这些文档

日志显示:

技巧和窍门

pod 名称的工作原理

豆荚的名称提供了一些细节。以下是它们的工作方式:

mysql-2-deploy

这意味着这是该服务的第二次部署msql。这是编排您的特定部署的 pod。

mysql-2-6c009

这意味着它是在第二次mysql部署期间部署的服务。最后随机的六位数字来自 pod id,它们必须在那里,因为您可以将许多服务实例部署到许多 pod。

看着豆荚

随着您对命令行工具越来越熟悉,您可能会发现自己经常运行oc get pods类似的命令。如果你是 linux,你可以使用该watch工具来帮助(在 Mac 上,只需这样做brew install watch)。然后运行:

watch -n 1 -d oc get pods

此命令将向您显示 pod 的实时视图,每秒更新一次:

watch       # run the following command repeatedly, showing the output
-n 1        # run every second (this is optional, the default is 2s)
-d          # show a diff, highlighting the changes as they happen
oc get logs # the command to watch

这个命令非常有用,你会经常使用它!

快速获取 pod 的日志

试试这个 bash 功能:

function podlogs() {
  echo "Getting logs for $1 for the last $2 duration"
  oc logs -f --since=$2 `oc get pods | grep $1 | grep 'Running' | grep -Ev 'deploy' | awk '{print $1}'`
}

它会让你运行这样的命令:

# get all logs for containers which match 'mysql' for the last 5 mins
podlogs mysql 5m

感谢我的好友 Praba 最后的提示。

请使用相关日志更新问题,我们可以从那里获取!

于 2017-12-10T04:47:51.950 回答