在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
答案 0 :(得分:1)
以下是我建议遵循的步骤。如果您可以在每个步骤中提供日志的输出,那么我们将帮助我们查看问题。
只有到目前为止,您才能通过用户界面,您需要oc
客户端进行更深入的故障排除。
首先,通过Web界面登录您的群集。选择屏幕右上角的问号,然后选择“命令行工具”
:按照说明下载并安装客户端。
一旦您获得了客户端并登录,请运行:
oc get pods
哪个应显示pod名称列表。请将问题的内容粘贴到您的问题中(作为文字,而不是图片!)
你有一个正在崩溃的pod,它将被称为mysql-2-6c009
。我们需要它的日志。粘贴输出:
oc logs mysql-2-6c009
如果由于部署失败而无法再看到该窗格,请尝试运行:
oc rollout latest mysql
然后再次运行oc get pods
,直到看到崩溃的广告连播。
日志显示问题,您没有指定正确设置数据库所需的环境变量。如果我们检查文档,我们可以看到相同的] 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
有关详细信息,请参阅these docs。
日志显示:
豆荚的名称可以提供一些细节。以下是它们的工作原理:
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
这个命令非常有用,你会经常使用它!
试试这个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致敬,获得最后一个提示。
请使用相关日志更新问题,我们可以从那里获取!