Install Minikube on Ubuntu Server 17.10

I have some experiences with Docker and containers, but never played with Kubernetes before. I started to explore Kubernetes recently as I may need a container orchestration solution in the coming projects. Kubernetes is supported by Azure AKS. Even Docker has announced their support of it. Looks like it is going to be the major container orchestration solution in the market for the coming years.

I started with deploying a local Kubernetes cluster with Minikube on a Ubuntu 17.10 server on Azure. Kubernetes has a document on its site which is about installing the Minikube. But it is very brief. So in this post, I will try to document the step by step procedure both for the future reference of myself and for others who are new to Kubernetes.

Install a Hypervisor

To install Minikube, the first step is to install a hypervisor on the server. On Linux, both VirtualBox and KVM are supported hypervisors. I chose to install KVM and followed the guidance here. The following are steps.

  • Make sure VT-x or AMD-v virtualization is enabled. In Azure, if the VM is based on vCPUs, the virtualization is enabled. To double check, run command egrep -c '(vmx|svm)' /proc/cpuinfo, if the output is 1, the virtualization is enabled.
  • Install the KVM packages with the following command:
sudo apt-get install qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils
  • Use the following command to add the current user to the libvert group, and then logout and login to make it work. Note, in the guidance the group name is libvirtd, but on Ubuntu 17.10, the name has changed to libvert.
sudo adduser `id -un` libvirt
  • Test if your install has been successful with the following command:
virsh list --all
  • Install virt-manager so that we have a UI to manage VMs
sudo apt-get install virt-manager

Install kubectl

Follow the instruction here to install kubectl. The following are the commands:

curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl

Install Minikube

Follow the instruction on the release notes of Minikube to install it. I used the following command:

curl -Lo minikube https://storage.googleapis.com/minikube/releases/v0.25.0/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/

When you finish this step, according to the official document, the installation of Minikube has been completed. But before you can use it, there are several other components which needs to be installed as well.

Install Docker, Docker-Machine, and KVM driver

Minikube can run on natively on the Ubuntu server without a virtual machine. To do so, Docker needs to be installed on the server. Docker-CE has a different way to be installed and Docker has a document for it.

Docker Machine can be installed with the following commands:

curl -L https://github.com/docker/machine/releases/download/v0.13.0/docker-machine-`uname -s`-`uname -m` >/tmp/docker-machine && \
sudo install /tmp/docker-machine /usr/local/bin/docker-machine

Finally, we need to install a VM driver for the docker machine. Kubernetes team ships a KVM2 driver which is supposed to replace the KVM driver created by others. However, I failed to make the Minikube work with the KVM2 driver. There is a bug report for this issue and hope the Kubernetes team will fix it soon.

So I installed the KVM driver with the following command:

curl -LO https://github.com/dhiltgen/docker-machine-kvm/releases/download/v0.10.0/docker-machine-driver-kvm-ubuntu16.04
sudo cp docker-machine-driver-kvm-ubuntu16.04 /usr/local/bin/docker-machine-driver-kvm
sudo chmod +x /usr/local/bin/docker-machine-driver-kvm

Test if Minikube Works

With the completion of all the above steps, we can test the Minikube now.

minikube start --vm-driver kvm

It will create a vm named as minikube in KVM and configure a local Kubernetes cluster based on it. With kubectl, you should be able to see the cluster info and node info.

kubectl cluster-info
kubectl get nodes

With that, you can start to explore Kubernetes.

Running Linux Containers on Windows Server 2016

I never thought running Linux containers on Windows Server is a big deal. A reason that I run Docker for Windows on my Windows 10 laptop is to run some Linux based containers. I thought I just need to install Docker for Windows on a Windows Server 2016 server with Container feature enabled, then I should be able to run both Linux and Windows containers. I didn’t know it is not the case until when I tried it yesterday.

It turns out the Linux Containers on Windows (lcow) Server is a preview feature of both Windows Server, version 1709 and Docker EE. It won’t work on Windows Server 2016 of which the version is older than 1709. As a side learning of this topic, I also got some ideas about the Windows Server semi-annual channel. An interesting change.

So here is a summary of how to enable lcow on Windows Server, version 1709.

  1. First of all, you need to get a Windows Server, version 1709 up and running. You can get the installation media of Windows Server, version 1709 from here. As I use Azure, I provision a server based on the Windows Server, version 1709 with Container image. Version 1709 was only offered as a Server Core installation. It doesn’t have the desktop environment.

  2. Once you have the server up and running, you will have to enable the Hyper-V and Containers feature on it, and install the Docker EE preview. It can be installed with the following PowerShell script.

    As I use the Azure image, the Container feature and Docker EE has been enabled on it, and docker daemon has been configured as a Windows service. I don’t have to run the above script.

  3. Now you can follow the instruction here to configure the lcow. Specifically, I use the following script to configure it. I also update the configuration file in C:\ProgramData\Docker\config\daemon.json to enable the experimental feature of LinuxKit when docker service is started.

  4. Once you finish all the above configuration, you have enabled the lcow on Windows Server 1709. To test it, simply run

docker run --platform linux --rm -ti busybox sh

That is it. If you want, you can also try to run Ubuntu containers by following the instructions here.

电影 Mark Felt

不知道是不是由于特朗普上台后,美国政治气候的关系,最近接连看了两部去年拍摄的,以尼克松总统任期内的故事为背景的政治电影。一部是电影The Post,另一部是Mark Felt,在从西雅图回来的飞机上看的。

看电影之前,我并不知Mark Felt是谁。在飞机的娱乐系统中点开这部电影,纯粹是因为它的副标题,The Man Who Brought Down the White House。我还以为是一部虚构的枪战片呢。随着电影情节的发展,我渐渐觉得,这个Mark Felt难道就是大名鼎鼎的“深喉”?可是我对水门事件的了解有限,多年前在《美国宪政历程》这本书里,读到过尼克松的案子,水门事件是作为案子的背景介绍的。那本书出版时,真正的“深喉”,身份也还没有曝光。所以直到电影接近尾声,我才确定这个Mark Felt真的就是“深喉”本人。看完电影之后,我又好奇心起,去翻了翻水门事件和Mark Felt的资料。

The Post讲述的是新闻报道自由的重要性,这部电影则是在讲述独立调查权的重要性。电影开场Mark Felt已经是FBI的二号人物了,局长胡佛已经不过问FBI的日常运作,一切日常事务都是Felt在管理。白宫想要收买他,许以FBI局长的位子,但Felt并没有被收买。在胡佛去世之后,尼克松任命了FBI的局外人Patrick Grey来担任局长,并试图通过Grey来控制FBI。恰于此时,水门事件爆发了,白宫通知Grey,要终止水门事件的调查。在FBI的独立调查权受到威胁之际,Felt不得已,选择通过泄露消息给华盛顿邮报,来曝光尼克松和白宫的隐秘行动,最终导致了尼克松的下台。

这部电影是以Felt的自传为蓝本改编的。电影将Felt塑造为一个忠诚的FBI探员,一位爱国者。当Grey通知Felt,要终止水门事件的调查时,Felt愤怒地对Grey说,FBI不受干扰的调查权,是FBI最宝贵的资产,一旦失去了,就再也拿不回来了。但Felt选择做“深喉”,通过违反FBI原则的方式对新闻媒体爆料,到底是真的担心FBI的权力受损,还是因为没能当上FBI局长而做出的报复,一直存在争议。电影中有一幕,是Felt的妻子Audrey,在得知Felt没能当上FBI局长后,对Felt抱怨,三十多年,十三次搬家,Audrey自己放弃了事业追求,唯一的安慰是Felt有一天能坐上FBI局长的位子,结果现在却落空了。在这通抱怨之后,Felt开始动用特工寻找自己的女儿,也开始通过“深喉”来爆料,这或许暗示了Felt心理转变的过程。或许Felt的行动,并非完全出于对FBI调查权受损的担心,或是完全为了报复尼克松。更大的可能是,这二者兼而有之。

水门事件过去40多年后的今天,美国总统和FBI的关系又变得空前紧张。特朗普一上台就解雇了FBI局长科米,又不断通过Twitter批评副局长麦凯布,这些都没能阻止FBI的“通俄”门调查。最近,特朗普又公布了共和党的备忘录,指责司法部和FBI滥用调查权。这一切似乎又显示着总统对FBI独立调查权的不满和干预。

到底是FBI滥用调查权,还是总统干预独立调查权?会出现另一个“深喉”吗?接下来的发展,还真是让人期待呢。

又见西雅图

1.

飞机降落在塔科马机场的时候,外面正下着瓢泼大雨。这样的大雨,在中国北方城市的冬季里,很少见到。

西雅图是个多雨的城市,而且雨季是在冬季。记得上大学的时候学英语,读到过一篇很有意思的文章。文章的作者说,他有一把伞,在西雅图多雨的天气里,这伞能带他去任何他想去的地方。更棒的是,这伞还带加热功能,在西雅图潮湿又寒冷的冬天里,能带给他温暖。我当时看了很惊讶,心想还有这么牛的雨伞。接着读下去,原来这伞就是作者的汽车,他卖了好大一个关子。

这篇文章给了我关于西雅图最早的印象之一。另一个关于西雅图的印象,是读了比尔盖茨的《未来之路》后,对他和他的公司充满了敬仰,知道了西雅图是微软总部所在地,那里住着许多富豪。

2.

我上次来西雅图,大概是两年多前。相比起那时,西雅图市区没有多少改变。Public market的小贩们还是那么开心,美心饼家还在,第一家星巴克门店还是有许多人排队,还是要照例去Crab Pot打卡。西雅图的街头也出现了共享单车的身影,中国的共享单车品牌ofo,和大概是本地品牌的Lime bike都能看到。但是在这多雨的天气里,没看到有人骑。

还有就是,鼎泰丰终于也开到西雅图市中心来了。

3.

在街角的Barns and Noble书店买了本《Fire and Fury》。这本书在书店打七折,在亚马逊上的折扣更高,但是亚马逊上标明的送货时间,是2到4个星期,来不及在我离开之前收到。

买这本书纯属猎奇,想看看作者到底写了些什么猛料,导致特朗普要威胁出版社不许出版,还要发律师信起诉作者。但是在特朗普以总统之尊,放狠话威胁之后,出版社和作者根本没加理会,书照出,还大卖,预售就登上了畅销书榜首。对比香港某书店老板和店员的经历,你甚至无法想象这样的事情会在中国发生。

不得不承认,这就是美国制度的伟大之处。这制度不能保证选出的总统各个优秀,但能保证烂总统也会被监督。

Web页面中的字体

我的blog荒废了很久,特别是2017年,基本没怎么管。最近觉着还是需要一个自己写字的地方,有一些时不时冒出来的想法,如果没记下来,没了也就没了。回看我很久之前写的一些文字,虽然不如何精彩,却也是一种个人记录。如果当时没写下来,那些人和事,只怕现在早已不记得了。所以又回来弄这个blog,想说把它弄得漂亮一点,至少自己看着也舒服。

我先是换了个theme。WordPress的主题目录里有太多的主题,看得人眼花缭乱,几乎选择困难症都要发作了。我最终选了这个gillian主题,觉着它比较适合我这样的个人blog,没有很多图片,也没有很多版式要求。在这个主题的基础上,我稍微改了改,主要是减少了标题背景的高度,留出更多空间给内容。

这个gillian主题是个英文主题,它的字体选择在iOS和Android上也还好,但是在Windows上就不那么好了。尤其是中文,会使用系统的默认中文字体,微软雅黑。虽然很多网页都是这么做的,但是我不太喜欢这款字体,于是改造了一下这款主题的字体选择。说实话,我之前对浏览器的fallback机制有大概的了解,但对字体没什么研究,搞不清楚衬线和非衬线的区别,和字型字重等等这些术语。为此,我跑去pluralsight听了一门名为Fundamentals of Typography的课程。算是对这些术语有了大概的了解。

原来,字体设计和使用是挺复杂又有趣的一件事情。以后有空,我会再多了解一些字体相关的知识。字体的选择需要考虑许多因素,但更多与设计师本身的审美有关。我对自己的审美没什么自信,所以最终选择了下面这样的字体搭配。

对于苹果平台的读者,如果有的话,使用苹果的系统字体就好了。使用别的字体,他们说不定反而会抱怨。对于其它平台,英文我选择了无衬线的Merriweather作为blog内容的字体,有衬线的Merriweather作为blog标题的字体。之所以这样选,是因为无衬线的Merriweather在大字号时,似乎有些字型有bug。更重要的中文字体,Windows上用等线体,Andriod上用Driod。等线体从Windows 8之后就默认安装在Windows里了,是我蛮喜欢的一款系统字体。Windows 7就用微软雅黑。其它情况就不考虑了。

此外,我还为这个blog加了个logo。没有什么设计感,不过在此过程中发现了一个看起来很厉害的设计网站Canva,logo就是用它设计的。在blog已经没人玩的当下,我决定试试google的AdSense,于是放了个广告在页面上,欢迎点击 🙂 。

电影 The Post

昨晚看了部电影,The Post,是一部讲述美国的新闻记者和媒体,维护新闻自由故事的电影。这部电影,演员和导演都是大牌,故事背景基于真实历史事件,主题又与现实的政治环境丝丝相扣,一时间在美国获得好评如潮。前几天,特朗普总统在twitter上公布“假新闻奖”,一度导致共和党网站宕机。在这样的氛围下,看这么部电影,真是应景。

1967年,美国正越来越深地陷入越战的泥淖,并看不到丝毫取胜的希望。时任美国国防部长麦克纳马拉,组织了一个研究项目,打算写一部百科全书式的越战历史。他后来声称,他希望通过这个项目,为后世的历史学家留下书面纪录,以及为将来的政府提供参考,希望他们日后能避免重蹈越战时期历任美国政府的错误政策和错误决策的覆辙。

这个项目小组最终写出了多达47卷的报告,其中包括3000多页历史记录分析和4000多页政府原始文件。重要的是,这个报告里记录了大量美国历任政府不为人知的机密行动和决策,涉及许多谎言,欺诈和权力的滥用。比如,美国总统约翰逊公开宣称,越战的目的是为了保护一个独立的,非共产的南越政府。但是报告中引述麦克纳马拉给约翰逊的备忘录,称越战的真正目的,不是为了帮助朋友,而是为了限制中国。再比如,报告披露,南越政府完全是由肯尼迪政府,为了对抗共产主义,出钱出枪,扶植建立的,等等。这份报告实在于美国政府的形象,以及进行中的越战,大大的不利。因此,这份报告从写成之日起,就被列为极为敏感的最高机密,普罗大众根本不知道它的存在。

1971年,一位斯诺登式的孤胆英雄出现了。这人名叫Daniel Ellsberg,是兰德公司的员工。他将这份五角大楼报告的一部分偷了出来,先是透露给纽约时报,后来又透过华盛顿邮报,进行发表。这份报告一经曝光,立即引起一系列连锁反应。先是尼克松政府以国家安全为名,限制媒体的报道,后来官司一路打到最高法院,最终美国政府败诉,媒体的新闻调查和报道自由得到了维护。这份报告即是著名的国防部文件(Pentagon Papers)

这份国防部文件,即是电影The Post的背景。电影故事展现华盛顿邮报的女老板Katharine Graham,总编Ben Bradlee和记者们,如何在巨大的挑战下,努力追求真相,坚持新闻出版自由,并最终让华盛顿邮报从一家地区小报,一举成为与纽约时报齐名的大报。

Meryl Streep主演的这位女老板Katharine Graham,也是一位传奇女性。她是史上第一位女性财富500强CEO,她更为人所知的,是其在之后的水门事件中,领导华盛顿邮报的表现。电影借由这位女老板,展现那个时代身为女性领导者的艰难。电影开始阶段,作为公司老板的Katharine,在面对她自己的董事会时,显得无力又懦弱。她的领导,备受董事会男成员的奚落。她的领导层中,除她之外全是男性。电影中有一幕,是她去华尔街为公司上市开幕。大门外的阶梯上,迎接她的是她的女性员工和朋友,大门推开,那些出现在开幕式上的,全部都是男性。但最终正是Katharine的坚持,华盛顿邮报才能顶住压力,坚持出版了那份报告。当Katharine冲着那个喋喋不休的董事会成员,说出那句“这不是我父亲的公司,也不是我丈夫的公司,这是我的公司”时,正展现了女性对自身权力的觉醒。Katharine决定发表国防部文件,某种程度上,是出于她对男权的反抗。

相比而言,Tom Hanks饰演的总编Ben Bradlee,则是一个相对单纯的角色。他不是公司老板,不需要为公司的运营负责。作为一名新闻出版业老兵,他能为了抢新闻,为了与纽约时报竞争,而不择手段。但在新闻自由受到威胁时,也能毫不犹豫的说出“他们输了,意味着我们也输了”。正是他和他的记者们对真相的追求和对新闻自由的坚持,给了Katherine做出艰难决定的勇气。

这部电影名列时代周刊2017年10佳电影首位,从剧情,拍摄,到演员的表演,都是上乘之作。稍有争议的地方,是关于史实的部分。实际上,在国防部文件事件中,纽约时报是主要的媒体报道者,以及与政府诉讼官司的主角。华盛顿邮报在此事件中的作用,并不如电影中那么重要。真正令华盛顿邮报名声大噪的,是之后的水门事件。不过这些小节于电影本身无伤大雅。

Creating API Management instances in Parallel with Automation Runbook

Provisioning an Azure API Management (APIM) service instance is a bit time-consuming task. It usually takes 20 to 30 minutes to get an instance created. In most of cases, it is fine because you usually don’t have the needs to create many APIM instances. For most customers, 2 or 3 instances are enough for their solutions. And provisioning APIM instances doesn’t seem to be a day to day work.

But recently I am preparing a lab environment for an APIM related lab session that I am going to deliver in an event. Given that provisioning an APIM instance would take 20 to 30 minutes, it is impracticable to let attendees create the instances during the lab session. I have to provision an APIM instance for each attendee before the lab session. As there could be more than 40 attendees, I have to do it with a script rather than manually clicking around in Azure portal.

APIM supports creating instances with PowerShell. It doesn’t support Azure CLI at the moment. The Cmdlet for instance creation is New-AzureRmApiManagement, and as mentioned in the document, this is a long running operation which could take up to 15 minutes. If I simply create a PowerShell script to run this operation sequentially, it would take tens of hours to get all APIM instances created. It is not acceptable. I have to run the operations in parallel.

I ended up creating a PowerShell Workflow runbook in Azure Automation to do the task. PowerShell Workflow has several ways to support parallel processing, and Azure Automation provides the enough computing resource to run all operations in parallel.

The following code snippet shows the key part of the workflow.

The code is quite straight forward. I need to include the Azure authorization code for each of the parallel operation because when operations are running in parallel, each operation runs in its own process. So each of them need to be authorized before they can access the Azure resource.

For the completed code, you can get it from here. To run this workflow runbook in Azure Automation, the AzureRM.ApiManagement module needs to be imported into Azure Automation. That’s all.

为什么Surface Book才是我心目中,PC的理想形态

上个月去美国旅行的时候,跑去微软商店买了一台Surface Book 2。几个星期用下来,我觉得它是我用过的,最好用的Windows 10 PC。它的这种混合了笔记本和平板的模式,是我觉得十分理想的PC形态。不知道微软怎么考虑的,Surface Book系列竟然只在少数几个国家卖。如果不是受限于微软的市场策略,和偏高的价格,它应该大卖才对。

Surface Book好在哪儿呢?

首先,它够强大,够powerful,又够轻。我之前用的是ThinkPad W540,i7+32GB内存,双显卡,非常强大,但是太重,单单它的充电器就比别人的整台机器还重了,不适合背着到处走。我的这台surface book,是13寸版本,i7+16GB内存,底座是带显卡的。跑Visual Studio,Docker等等,统统没问题。文明6玩起来也比W540感觉还强。重点是,不相上下的性能,surface book的重量连W540的一半都不到,也就刚刚比W540的充电器重了一点点吧,绝对有利于保护肩膀。

其次,surface book的底座更稳定,键盘手感更好。我之前还有一台surface pro 3。那时候是出门用surface pro,在家用W540。Surface pro的键盘手感不好还在其次。有一次去客户机房,服务器旁边没桌子,我只好坐在高脚椅上,然后把surface pro摊开放腿上。可是surface pro典型的头重脚轻,一不小心,它从我腿上掉下去了,我伸手只抓到了它的键盘。偏巧掉下去的角度不对,是一角先着地,屏幕就摔裂了,直接导致触屏玩完了。也导致我之后不得不背着W540出门。Surface book的屏幕和键盘重量比较均衡,链接铰链也比surface pro的安全多了。

第三点就是它对Windows 10的支持了。通过平板分离按键,可以在不断电的情况下,将平板部分卸下来。由于它有两块电池,平板部分的电池比较小,使得它端着比surface pro还轻。这点太方便了。有时候资料看到一半,不想坐在办公桌前看了,可以卸下平板,端着坐沙发上看,完全可以无缝切换。虽然离了底座,平板的电池大概只能支撑两三个小时,不过对轻度使用足够了。

总之surface book我用着蛮好的,希望微软能调整策略,让它大卖。

又是新的一年

2017年已经过去一个星期了。不知不觉之间,就过了一年,长了一岁。“人生天地之间,如白驹之过隙,忽然而已”,庄子的这句感叹,真是恰如其分。回望2017年,有些事情做的不错,小有成绩,有些事情就做得没什么结果。总的来说,小有成绩,没犯大错,算是平顺的一年。

2017年初的时候,我利用项目间的空档,学习了一下Docker容器相关的内容。又觉得应该掌握一门前端框架,就学习了React和Redux,这些竟然在后续的项目中都用到了。回想起来,如果当时那段空档时间荒废掉了,后面的项目估计会做得十分痛苦。

下半年的项目,是一个基于Azure的应用开发。项目里用到的Azure服务,在以前的项目里虽然也用,也和不同的客户讨论讲解过,但用的比较零散。这个项目才是我真正第一次,将这些涉及到的服务统合在一个solution中,并全面实践敏捷方法和DevOps,非常有收获。连带着项目总结,向Ready大会递交了两个content proposal,没想到都被接受了。其中一个被接受为Digital Ready的session,另一个是现场。这是我第一次被邀请为Ready的speaker,算是实现了一个小目标。从我提交content proposal的经验看,具体的产品和技术,Ready更倾向于选择产品组的内容。对于来自field的proposal,他们更看重的是所谓Lessons learned的内容,纯粹讲技术,他们不太会接受,毕竟field来的讲技术,是讲不过产品组的。

年底我们一家人去了一趟美东旅行。纽约,费城,华盛顿,尼亚加拉瀑布,波士顿,纽黑文,走了一大圈。虽然天气很冷,在波士顿遇到大雪,但没有遇到极端恶劣的天气,旅程出奇的顺利,我们都玩得很开心。我们在新年之前回到新加坡,新年之后的这几天,美东的天气变的极端糟糕,大量航班延误,交通受阻。我们不禁庆幸,老天爷算是给面子。

2018年已经开始,我心里也有些目标,要实现还是要努力才行。不过我想,如果能继续保持下面三条实践的话,还是有机会的。

  • 合理利用项目间的空闲时间,不断学习
  • 关注新技术的发展
  • 保持好奇心

比特币疯狂

1.
前两天看见朋友在朋友圈发了条高晓松讲的笑话,说他有个学长,当年在比特币只有几毛钱的时候,和人合伙买了两万个。俩人都怕对方背着自己买卖比特币,所以设计了一个巨复杂的密码,两人各持一半,要一起输入才能解密。结果那个合伙人去年车祸去世了,剩下那个学长望币兴叹。这当然是个笑话,不过我倒是想起了,几年前我也玩过比特币的。

2.
2010 – 2011年的时候,我偶然读到了一些关于比特币的文章,对它的原理十分好奇,同时又被中本聪的传奇吸引,混到了一个玩比特币的twitter圈子里潜水。那时候的比特币基本不值钱,我记得我上一个比特币论坛,里面的人为了推广比特币,会给回帖的新人送币。我的第一笔比特币交易,就是这么完成的,论坛里的人送了我0.2个,按照今天的市值,差不多几千美金吧。还有人兴奋的宣布,他成功用比特币买了一个披萨,大概花了三四枚的样子。按照今天的市值,那哥们大概花了几万美元吃了一个披萨,味道一定好到逆天了吧。

3.
2011年的时候,挖矿还比较容易。一台PC装上一块显卡,每8个小时,大概能挖到0.04 – 0.05枚BTC,有时候运气好的话,甚至可以到0.1BTC。现在挖矿的收益已经大减了,据说一台最powerful的矿机,跑一个月也只能挖到0.25BTC。不知道这能否够付电费的。所以很多文章都建议,如过想要比特币的话,拿投资矿机的钱和电费,去直接买,可能会有更高的收益。

4.
有人认为,比特币是史上最大的郁金香泡沫,也有人认为,数字加密货币是未来。到底是投机还是未来?我不知道。

今日比特币价格:$16982.85