早先BlueMix云计算各种限制极为宽松,其提供的免费Docker容器由于配置高,并且配带IP受到极大地好评,不管各位使用Docker做站还是用作其他用途,亦或是使用Docker搭建SS服务器,不过从今天起,这个时代过去了…(绑定信用卡仍可以享受免费的每月Docker配额和原生Docker服务.已知虚拟卡无法通过验证)
已经更新Kubernetes简单教程,可以用于部署部分程序.
抽奖模式开启 – 美国南部开出来的机器不一定是达拉斯的,可能是Softlayer的美国节点,德国开出来的可能是欧洲节点.

本文章已经长时间未更新,部分操作可能已经过时。感谢网友提醒,现在想要获取IP只能在BlueMix控制台查看节点IP。
[12月15日更新]
咋老是有人不看文章就发评论呢.我当然知道部分地区开不出容器服务了.
新的IBM云的免费政策如下:
新注册的用户默认为不限日期的开发者账户,只能使用极少数的Lite(轻量)级别的服务.包括256M的Cloud Foundry云引擎,Kubernetes集群,机器学习,API,数据分析,语言输出和翻译等服务.IBM似乎并不是很在意公有云业务,更多的中心放在基础设施服务上,也就是SoftLayer,IBM云可以和SoftLayer绑定,并且使用已购买的SoftLayer产品部署IBM云服务.
IBM云共享SoftLayer的基础设置意味着IBM云存在日本,新加坡等节点,但是不意味着你可以用这些节点..所以在选择Kubernetes地区时能看到日本你不需要太过惊讶,毕竟免费帐户是不能使用这些节点的.升级为Pay As You Go 账户并且选择即用即付式K8S集群可以选择服务位置.
有些人说开不出来集群,我测试了一下,目前可以开出集群,只有法国节点..请这么操作:登陆你的账号(仪表盘应该显示你在美国南部)->点击创建资源->Kubernetes集群->选择轻量级(免费的那个)->创建.应该会被创建在德国,集群服务器位置时法国..
如果创建成功会今日集群的节点管理页面,看到有节点正在部署就可以等着了,如果失败了就删除再试一次…
[2017年11月10日更新]
BlueMix正式更名IBM CLOUD 并正式停止免费试用账户.现在注册的用户均为Standard Account 享受256M的Cloud Foundry云引擎服务和Lite服务(机器学习等)Docker服务并不在免费用户和标准用户的范畴内,如要使用,必须绑卡升级为Pay as you Go账户.同时升级后将赠送200刀余额用于测试各种服务.

目前还不知道IBM为什么停止供应Docker容器,或许是为了将原生Docker逐步迁移到更加安全和便捷的Kubernetes服务,也可能是无法忍受原生容器被大量滥用.总之IBM取消了免费的原生Docker容器.不过Kubernetes依然是Docker服务,并且提供了GUI面板以及命令行服务,目前openshift也是采用Kubernetes容器,不过IBM家的Kubernetes提供了root权限,所以并不是那么坑爹.

※BlueMix Kubernetes cluster免费版本(Lite版):在测试期间,Lite版可以免费创建,若绑定信用卡可以再建立原生Docker的基础上继续免费测试Kubernetes Lite版,Lite版本使用共享硬件,提供2个CPU核心和4G内存,以及一个独立IP(可以映射给多个容器).Kubernetes并非即时开通,需要等待空闲服务器(审核?)才可以开通Kubernetes部署需要进行构建,时间约为15-45分钟.

Kubernetes简单教程 – 部署带有SSH的镜像并且映射端口

首先登陆到bluemix面板建立容器服务.

容器类型选择第一个,繁体中文叫叢集,简体中文叫集群,英文叫cluster,点击建立,默认即可.只有精简(Lite)是免费的,Standard是付费的,但是可以享受独立的硬件以及自定义的子网和负载均衡等操作.

点击后是这样的

部署完是这样的

※我推荐使用Linux环境部署kubectl,Windows下的CMD由于字符集和部分操作的兼容性问题会导致部分命令排版错误.

首先需要准备两个程序,分别是Bluemix CLI和Kubernetes CLI,两个程序均支持Windows/MAC/Linux,其中Bluemix CLI是可选项,如果不需要部署CloudFoundry应用或原生Docker则可以不安装Bluemix CLI,但是Kubernetes CLI必须安装,Kubernetes CLI不需要原生Docker支持,所以你的VPS和Windows都不需要预装原生Docker.
Bluemix CLI : https://clis.ng.bluemix.net/ui/home.html
Kubernetes CLI : https://kubernetes.io/docs/tasks/tools/install-kubectl/

下载完成后的Kubernetes CLI是一个可执行文件,Windows环境下需要把Kubernetes CLI的目录放到Path环境变量下,Linux只需要吧kubectl文件移动到bin目录下并给予执行权限.

然后获取Kubernetes配置文件和密钥,目前有两种方法获得这些文件,一种是通过BluemixCLI命令获得,另一种实在Bluemix web console中获得.CLI命令是(该命令Windows/Linux通用):

bx plugin install container-service -r Bluemix #下载Bluemix容器服务插件

bx login -a https://api.au-syd.bluemix.net #指定服务可用区,目前支持Kubernetes的可用区有:美国南部,德国,悉尼

bx cs init #初始化容器服务

bx cs cluster-config mycluster #自动下载配置文件

export KUBECONFIG=/Users/ibm/.bluemix/plugins/container-service/clusters/mycluster/kube-config-prod-mel01-mycluster.yml #将配置文件设定为环境变量,Linux可用

Windows需要再增加一步操作,由于Windows不支持export命令设置环境变量.Windows用于需要到C:\User\当前用户名\.bluemix\plugins\container-service\clusters\mycluster目录下找到
****-mycluster.pem和kube-config-****-mycluster.yml
将这两个文件复制到C:\Users\当前用户名\.kube目录下,并且把kube-config-****-mycluster.yml改名为config,如若没有.kube目录请自行创建

※这一步操作同样适用于Linux用户,如果不希望使用export命令也可以如此操作.Linux目录为 /home/你的用户名/.bluemix/*** 和 /home/.kube/***如果是root用户则在/root/.bluemix 或 /root/.kube下

在Bluemix web console中获得Kubernetes配置文件:



下载下来的是ZIP压缩包,同样包含****-mycluster.pem和kube-config-****-mycluster.yml两个文件,使用如上方法配置即可

接下来执行命令:kubectl get nodes如果能获取节点则证明配置成功了.然后执行

[root@node10276-env-2244137 .kube]# kubectl proxy --port=88
Starting to serve on 127.0.0.1:88

如果返回Starting to server on ****:88 则成功,如果端口被占用,修改–port=后的参数,改成可用的端口.然后在浏览器访问127.0.0.1:88/ui就可以打开Kubernetes的管理面板.接下来的操作在Kubernetes管理面板进行,请不要关闭shell窗口或者CMD窗口.
接下来点击管理面板中的Deployments菜单->右上角的+Create.


※按要求填写,也可以仿照我填写,服务类型务必选择External,否则将无法映射端口.

端口一定要提前映射全,否则跑起来再改挺麻烦的!!另外,UDP端口和TCP端口不能同时映射,否则会出现成功建立容器但是没有service的情况,这种情况下无法映射端口!!!,也就是说我图上的操作是错误的,徐要移除那个UDP端口!!

然后选择show advanced options 来设置高级选项(主要是root权限需要开启)同时设置一下CPU和RAM限制,最后选择Deploy

随后便成功建立了一个Docker容器,如下图,所有的项目均显示绿色对勾且无红色/橙色错误提示就说明你的容器成功跑起来了.接下来需要进行一些设置以便访问SSH服务.由于我使用的jdeathe/centos-ssh镜像为了安全考虑禁用了root账户/密码登录,同时我还懒得搞环境变量,于是这里需要使用命令通过Docker主控端进入容器进行SSH配置.这款镜像由于比较新,而且没有什么错误,非常适合生产环境,如果你懒得处理,请使用treasureboat/ssh这个镜像,这个镜像默认密码123456,用户root.是CentOS6.6的镜像.比较老,且有一些bug,但是不影响使用.

接下来我们要去SERVICE页面查看我们映射的端口.在KubernetesUI中选择Services and discovery->Service并且找到你创建的服务,服务名与你创建的容器名是一样的.默认创建的Service名字前面的图标是灰色的,不影响使用的.其中低位端口号是监听端口,高位端口号是映射端口(监听端口在上,映射端口在下)

点击右侧的三个点->View/Edit YAML可以看到配置文件,但是没有修改经验请不要随便修改…以免出现问题

你的公网IP可以用 kubectl get nodes 看到,此外Bluemix后台,KubernetesUI也能找到,自己翻翻.使用公网IP:nodeport访问SSH端口然后如果你用的是treasureboat的镜像就可以用root/123456登陆了,如果你是jdeathe的镜像需要进行别的操作.如果你用的是其他人提供的比方说第三方的SS镜像啊啥的,根据第三方说明操作.有问题可以falcomaa@qq.com邮件联系我,我提供力所能及的帮助服务.
(jdeathe的镜像没有开启密码登录)

接下来的操作务必在Linux环境中执行,CMD会导致VIM操作无法正常被识别…使用kubectl get pods获得正在运行的容器,POD的命名采用你创建时候起的名字-随机字符,比如说我创建了centos6dev,那么我的pod名就是centos6dev-3605066391-mrdrg这个.

然后使用命令 kubectl exec -it <pod name> -- /bin/bash 进入shell

需要修改/etc/ssh/sshd_config文件(请自己安装习惯使用的编辑器),修改两项分别是PermitRootLogin和PasswordAuthentication这两项的值必须是yes.然后执行如下命令(仅限CentOS6,7不好使):
service sshd restart
然后使用passwd命令修改root密码,这个不用我教了,如果报错/usr/share/cracklib/pw_dict.pwd: No such file or directory,请重新安装(reinstall)cracklib-dicts passwd
※CentOS7 Docker可能会出现systemd不好用的BUG,这个没办法,我的解决方案是利用命令杀掉SSHD然后再重启sshd.

最后回到PC,进入xshell用映射出的端口访问一下SSH,应该就没问题了.

最后还是希望各位不要滥用这些优秀的服务,有些用户可能会拿来跑SS,我个人持保留意见,至于有些想跑KCP/FS等暴力加速插件的用户我个人建议是不要搞过了,个人用用就算了,别拿来跑飞机场…然后KCP/FS需要UDP端口,但是映射过TCP端口的service无法映射udp端口,给个提示kubernetes集群内网互通…当然还有更简单的办法,我这里就不说了.善用谷歌的朋友一定会找到解决方案的…

补充内容:解决CentOS7下systemctl命令无法使用的问题

如果在原生Docker运行systemctl命令(用于启动/停止/重启服务的命令,也就是Service命令的升级)会提示Failed to get D-Bus connection: No connection to service manager.
这个问题被CentOS官方定义为一个BUG,会在之后版本中修复.对于使用原生Docker环境(Kubernetes基于原生Docker)的朋友可以采用以下方案解决,在执行docker run命令时加入Run command字段值为/usr/sbin/init在KubernetesUI应当如下图设置(Debian/Ubuntu不存在次BUG.)

头图版权:幻想と文学の世界へ@Bison倉鼠 PID=63560631