<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Kohei Ota</title>
    <description>The latest articles on Forem by Kohei Ota (@inductor).</description>
    <link>https://forem.com/inductor</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F48425%2Fc59486d9-7b8c-4b72-bde8-7aa227fb5b02.jpeg</url>
      <title>Forem: Kohei Ota</title>
      <link>https://forem.com/inductor</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/inductor"/>
    <language>en</language>
    <item>
      <title>Wait, Docker is deprecated in Kubernetes now? What do I do?</title>
      <dc:creator>Kohei Ota</dc:creator>
      <pubDate>Wed, 02 Dec 2020 20:11:39 +0000</pubDate>
      <link>https://forem.com/inductor/wait-docker-is-deprecated-in-kubernetes-now-what-do-i-do-e4m</link>
      <guid>https://forem.com/inductor/wait-docker-is-deprecated-in-kubernetes-now-what-do-i-do-e4m</guid>
      <description>&lt;h2&gt;
  
  
  tl;dr
&lt;/h2&gt;

&lt;h3&gt;
  
  
  For developers
&lt;/h3&gt;

&lt;p&gt;Don't panic, Docker containers and images are still alive. It's not that it will change everything.&lt;/p&gt;

&lt;p&gt;Also worth reading:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://kubernetes.io/blog/2020/12/02/dont-panic-kubernetes-and-docker/" rel="noopener noreferrer"&gt;https://kubernetes.io/blog/2020/12/02/dont-panic-kubernetes-and-docker/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://kubernetes.io/blog/2020/12/02/dockershim-faq/" rel="noopener noreferrer"&gt;https://kubernetes.io/blog/2020/12/02/dockershim-faq/&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  For K8s admins
&lt;/h3&gt;

&lt;p&gt;Read this carefully and start considering Docker alternatives&lt;/p&gt;

&lt;h2&gt;
  
  
  Is it true?
&lt;/h2&gt;

&lt;p&gt;Yes, it is true. Docker is now deprecated in Kubernetes.&lt;/p&gt;

&lt;p&gt;Ref. &lt;a href="https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.20.md#deprecation" rel="noopener noreferrer"&gt;https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.20.md#deprecation&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Docker support in the kubelet is now deprecated and will be removed in a future release. The kubelet uses a module called "dockershim" which implements CRI support for Docker and it has seen maintenance issues in the Kubernetes community. We encourage you to evaluate moving to a container runtime that is a full-fledged implementation of CRI (v1alpha1 or v1 compliant) as they become available.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In short, what it means here is that Docker does not &lt;em&gt;support&lt;/em&gt; Kubernetes Runtime API called CRI(Container Runtime Interface) and Kubernetes people have been using a bridge service called "dockershim". It converts Docker API and CRI, but it will no longer be provided from Kubernetes side within a few minor releases.&lt;/p&gt;

&lt;p&gt;Docker in local is a very powerful tool to create dev environment for sure, but in order to understand what's causing this, you need to understand what Docker does in the current Kubernetes architecture.&lt;/p&gt;

&lt;p&gt;Kubernetes is an infra orchestration tool that groups up many different compute resources such as virtual/physical machines and make it look like a huge compute resource for your application to run and share with others. In this architecture, Docker, or a container runtime, is used only to run those applications in an actual host by being scheduled by Kubernetes control plane.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F6hohswt225do6y8c3d7u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F6hohswt225do6y8c3d7u.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Look at the architecture diagram. You can see that each Kubernetes node talks to the control plane. &lt;code&gt;kubelet&lt;/code&gt; on each node fetch metadata and it execs CRI to run create/delete containers on the node.&lt;/p&gt;

&lt;h2&gt;
  
  
  But why is Docker deprecated?
&lt;/h2&gt;

&lt;p&gt;Again, Kubernetes only talks in CRI and talking to Docker requires a bridge service. So that's reason 1.&lt;/p&gt;

&lt;p&gt;To explain the next reason, we have to see the Docker architecture a bit. Here's the diagram.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fh54wfmf6utvuyih5z0du.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fh54wfmf6utvuyih5z0du.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So yeah, Kubernetes actually needs inside of the red area. Docker Network and Volume are not used in Kubernetes.&lt;/p&gt;

&lt;p&gt;Having more features while you never use, itself can be a security risk. The less features you have, the smaller the attack surface becomes.&lt;/p&gt;

&lt;p&gt;So this is where you start considering alternatives. It's called CRI runtimes.&lt;/p&gt;

&lt;h2&gt;
  
  
  CRI runtimes
&lt;/h2&gt;

&lt;p&gt;There are two major CRI runtime implementations.&lt;/p&gt;

&lt;h3&gt;
  
  
  containerd
&lt;/h3&gt;

&lt;p&gt;If you just want to migrate from Docker, this is the best option as containerd is actually used inside of Docker to do all the "runtime" jobs as you can see in the diagram above. They provides CRI and it's 100% what Docker provides, too.&lt;/p&gt;

&lt;p&gt;containerd is 100% open source so you can see docs on GitHub and even contribute to it too.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/containerd/containerd/" rel="noopener noreferrer"&gt;https://github.com/containerd/containerd/&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  CRI-O
&lt;/h3&gt;

&lt;p&gt;CRI-O is a CRI runtime mainly developed by Red Hat folks. In fact, this runtime is used in Red Hat OpenShift now. Yes, they do not depend on Docker anymore.&lt;/p&gt;

&lt;p&gt;Interestingly, RHEL 7 does not &lt;em&gt;officially&lt;/em&gt; support Docker either. Instead, they provide Podman, Buildah and CRI-O for container environment.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/cri-o/cri-o" rel="noopener noreferrer"&gt;https://github.com/cri-o/cri-o&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;CRI-O's strength in my opinion is its minimalism because it was created to be a "CRI" runtime. While containerd started as a part of Docker trying to be more open source, they are pure CRI runtime so CRI-O does not have anything that CRI does not require.&lt;/p&gt;

&lt;p&gt;It can be more challenging to migrate from Docker to CRI-O because of that, it still provides what you needs to run applications on Kubernetes.&lt;/p&gt;

&lt;h2&gt;
  
  
  One more thing...
&lt;/h2&gt;

&lt;p&gt;When we talk about Container Runtimes, we need to be careful &lt;em&gt;which type&lt;/em&gt; of runtime you're talking about. We do have two types of runtimes; CRI runtimes and OCI runtimes.&lt;/p&gt;

&lt;h3&gt;
  
  
  CRI runtimes
&lt;/h3&gt;

&lt;p&gt;As I described, CRI is an API that Kubernetes provides to talk to a container runtime in order to create/delete containerised applications.&lt;/p&gt;

&lt;p&gt;They talk in gRPC via IPC as kubelet and the runtime runs on the same host, and a CRI runtime has responsibility for getting request from kubelet and execute OCI container runtime to run a container. Wait, what? Maybe I should explain with a diagram for this one.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F98q12ppk63h3gs1p6zc0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F98q12ppk63h3gs1p6zc0.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So what a CRI runtime does is the following&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Get the gRPC request from kubelet&lt;/li&gt;
&lt;li&gt;Create OCI json config following &lt;a href="https://github.com/opencontainers/runtime-spec/blob/master/schema/config-schema.json" rel="noopener noreferrer"&gt;the spec&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  OCI runtimes
&lt;/h3&gt;

&lt;p&gt;OCI runtimes are responsible for spawning a container using Linux kernel system calls such as cgroups and namespace. You might have heard about &lt;code&gt;runc&lt;/code&gt; or &lt;code&gt;gVisor&lt;/code&gt;. This is what they are.&lt;/p&gt;

&lt;h4&gt;
  
  
  appendix1: how runC works
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F0zuiw38d4w1x6qxl0e0d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F0zuiw38d4w1x6qxl0e0d.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;runC spawns containers after CRI executes the binary by calling Linux system calls. That indicates runC &lt;em&gt;relies on&lt;/em&gt; the kernel that is running on your Linux machine.&lt;/p&gt;

&lt;p&gt;It also implies that if you ever discover runC's vulnerability that makes you take the root privilege of your host, a containerized application &lt;em&gt;can&lt;/em&gt; also do so. A bad hacker could take your host machine's root and boom! Things surely will get bad. This is one of the reasons why you should keep updating your Docker(or any other container runtimes) too, not just your containerized application.&lt;/p&gt;

&lt;h4&gt;
  
  
  appendix2: how gVisor works
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fi5w2gmpstmjf3d460n9w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fi5w2gmpstmjf3d460n9w.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;gVisor is an OCI runtime that were originally created by Google folks. It actually runs on their infrastructure to run their Cloud services such as Google Cloud Run, Google App Engine(2nd gen), and Google Cloud Functions(and even more!)&lt;/p&gt;

&lt;p&gt;What's interesting here is that gVisor has a "guest kernel" layer which means a containerised applications cannot directly touch to the host kernel layer. Even if they &lt;em&gt;think&lt;/em&gt; they do, they only touch the gVisor's guest kernel.&lt;/p&gt;

&lt;p&gt;gVisor's security model is actually very interesting and worth reading &lt;a href="https://gvisor.dev/docs/" rel="noopener noreferrer"&gt;the official doc&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Notable differences from runC is as follows.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Performance is worse&lt;/li&gt;
&lt;li&gt;Linux kernel layer is not 100% compatible 

&lt;ul&gt;
&lt;li&gt;Look at &lt;a href="https://gvisor.dev/docs/user_guide/compatibility/" rel="noopener noreferrer"&gt;the compatibility section on official doc&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Not supported by &lt;em&gt;default&lt;/em&gt;
&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Docker is surely deprecated but only in Kubernetes, so if you're a K8s admin, you should start thinking to adopt a CRI runtime such as containerd and CRI-O.
&lt;/h3&gt;

&lt;p&gt;a. containerd is Docker compatible where the core components are the same.&lt;br&gt;
b. CRI-O can be a strong option where you want more minimal functionality for Kubernetes&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Know what the difference of CRI and OCI runtime responsibility and scope
&lt;/h3&gt;

&lt;p&gt;Depending on your workload, runC might not be always the best option to use!&lt;/p&gt;

</description>
      <category>docker</category>
      <category>kubernetes</category>
    </item>
    <item>
      <title>Kubernetes is not just about Tech. It has a huge community!</title>
      <dc:creator>Kohei Ota</dc:creator>
      <pubDate>Sun, 01 Dec 2019 00:13:35 +0000</pubDate>
      <link>https://forem.com/inductor/kubernetes-is-not-just-about-tech-it-has-a-huge-community-2ooo</link>
      <guid>https://forem.com/inductor/kubernetes-is-not-just-about-tech-it-has-a-huge-community-2ooo</guid>
      <description>&lt;h2&gt;
  
  
  Intro
&lt;/h2&gt;

&lt;p&gt;When talking about Kubernetes, the philosophy inherited from Google and the advantages of container technology are of course indispensable.&lt;/p&gt;

&lt;p&gt;But Kubernetes has evolved so far not only in technology but also because of &lt;strong&gt;the large ecosystem and the presence of the community&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This time, I will introduce the various things that support Kubernetes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kubernetes and SIGs
&lt;/h2&gt;

&lt;p&gt;Kubernetes has several community types, all of which belong to the &lt;a href="https://github.com/kubernetes/community" rel="noopener noreferrer"&gt;kubernetes/community&lt;/a&gt; repository.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SIG (Super Interest Group)&lt;/li&gt;
&lt;li&gt;UG (User Group)&lt;/li&gt;
&lt;li&gt;WG (Working Group)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As you can see, SIG has many groups :D&lt;/p&gt;

&lt;p&gt;If you would like to see the full list, see &lt;a href="https://github.com/kubernetes/community/blob/master/sig-list.md" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;On the list, you can see there are lots of chairs(persons who lead each group) and they are from different organizations for &lt;em&gt;vendor neutrality&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why different organizations
&lt;/h2&gt;

&lt;p&gt;Kubernetes was originally rewritten in Golang based on the idea of a distributed application platform called Borg that was originally developed by Google. Therefore, it started as an OSS led by Google.&lt;/p&gt;

&lt;p&gt;Starting with the release of Kubernetes 1.0, the organization “CNCF (Cloud Native Computing Foundation)” launched by Google and the Linux Foundation has been managed by Kubernetes and has restarted as an open community independent of vendors. For more details, see &lt;a href="https://techcrunch.com/2015/07/21/as-kubernetes-hits-1-0-google-donates-technology-to-newly-formed-cloud-native-computing-foundation-with-ibm-intel-twitter-and-others/" rel="noopener noreferrer"&gt;This TechCrunch article&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Since then, various efforts have been made to ensure that all users contribute equally and participate in the community.&lt;/p&gt;

&lt;p&gt;Kubernetes itself is a product with a clear idea, and it aims to make itself independent of any vendor.&lt;/p&gt;

&lt;p&gt;However, in real-world, you would probably want something like these&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS integration&lt;/li&gt;
&lt;li&gt;Ease with on-prem bare metal&lt;/li&gt;
&lt;li&gt;L7 load balancers management on Kubernetes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The context of using Kubernetes changes in various usage scenes.&lt;br&gt;
e.g.) Running Kubernetes as a batch platform, Using GPUs, or Running various web applications.&lt;/p&gt;

&lt;p&gt;Kubernetes is very scalable for these demands.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Custom controller&lt;/li&gt;
&lt;li&gt;Custom scheduler&lt;/li&gt;
&lt;li&gt;Custom metrics&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These can be combined to suit your needs.&lt;/p&gt;

&lt;p&gt;People submit various discussions, suggestions, and efforts every day in these communities to make Kubernetes a better place in the world.&lt;br&gt;
Conversely, if you want to get involved with Kubernetes, the first thing you should get started with is the Kubernetes community.&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>cloudnative</category>
      <category>community</category>
    </item>
    <item>
      <title>What the flip are QUIC and HTTP/3?</title>
      <dc:creator>Kohei Ota</dc:creator>
      <pubDate>Tue, 13 Nov 2018 08:06:17 +0000</pubDate>
      <link>https://forem.com/inductor/what-the-flip-are-quic-and-http3-5fg6</link>
      <guid>https://forem.com/inductor/what-the-flip-are-quic-and-http3-5fg6</guid>
      <description>&lt;h1&gt;
  
  
  TL;DR
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://daniel.haxx.se/blog/2018/11/11/http-3/"&gt;IETF(Internet Engineering Task Force) has agreed to rename HTTP-over-QUIC to HTTP/3&lt;/a&gt;. What the flip are they anyway?&lt;/p&gt;

&lt;h1&gt;
  
  
  Describe QUIC and HTTP/3 in one sentence each.
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Note: QUIC != HTTP/3, iQUIC + HTTP/2 API == HTTP/3&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;QUIC is a new transport protocol originally proposed by a Google developer to resolve many of problems which the current HTTP/1.1 and HTTP/2 have.&lt;/p&gt;

&lt;p&gt;HTTP/3, previously called HTTP-over-QUIC, is a protocol stack integrated with QUIC and HTTP/2.&lt;/p&gt;

&lt;h1&gt;
  
  
  Before you learn them
&lt;/h1&gt;

&lt;p&gt;OK, as you've read the describes already, before you get to know about them, you would need to know how current HTTP works.&lt;/p&gt;

&lt;p&gt;HTTP(HyperText Transport Protocol) is an application layer protocol to deliver HyperText Documents such as HTML and XML. Nowadays it's used pretty much everywhere on the Internet for many different purposes and it's now so-called "World Wide Web".&lt;/p&gt;

&lt;h1&gt;
  
  
  Why did they need changes?
&lt;/h1&gt;

&lt;p&gt;HTTP was originally made by a CERN scientist called Tim Berners-Lee but the very original protocol was very simple and just has GET method. It was so simple that it has &lt;a href="https://www.w3.org/Protocols/HTTP/AsImplemented.html"&gt;only one single page documentation&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Now we use HTTP/1.1 for the most traffics but it has the following problems&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HTTP is a pretty-much-30-years-old protocol &lt;/li&gt;
&lt;li&gt;Security layer is not included in the protocol

&lt;ul&gt;
&lt;li&gt;Any traffic could be watched by someone unless server maintainer enables TLS&lt;/li&gt;
&lt;li&gt;Ref: &lt;a href="https://letsencrypt.org/2014/11/18/announcing-lets-encrypt.html"&gt;https://letsencrypt.org/2014/11/18/announcing-lets-encrypt.html&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Even TLS 1.2 has some problems(Don't use older than TLS 1.1 without a valid reason :P)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;HoL Blocking can be a huge problem when you have huge traffic

&lt;ul&gt;
&lt;li&gt;Both HTTP/1.1 and TCP have this problem from different aspect&lt;/li&gt;
&lt;li&gt;HTTP/2 addressed the problem from HTTP wise&lt;/li&gt;
&lt;li&gt;As long as HTTP relies on TCP, HoL Blocking based on TCP cannot be resolved even if you enable HTTP/2&lt;/li&gt;
&lt;li&gt;One packet lost makes all stream wait until the package is received&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  How does HTTP/3 resolve these problems?
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;QUIC works on UDP protocol(!)&lt;/li&gt;
&lt;li&gt;QUIC layer gives...

&lt;ul&gt;
&lt;li&gt;Encryption integrated with TLS 1.3 with 0-RTT handshake&lt;/li&gt;
&lt;li&gt;Ref: &lt;a href="https://speakerdeck.com/kazuho/security-privacy-performance-of-next-generation-transport-protocols"&gt;https://speakerdeck.com/kazuho/security-privacy-performance-of-next-generation-transport-protocols&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Congestion control without "good old" TCP&lt;/li&gt;
&lt;li&gt;High accessibility under mobile network w/ Connection UUID(Switching Wi-Fi &amp;lt;-&amp;gt; LTE won’t make renegotiation)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Protocol Overview
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fO39s5-1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/media/Dq0JawMXQAAv2du.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fO39s5-1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/media/Dq0JawMXQAAv2du.jpg" alt=""&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://twitter.com/kazuho/status/1057511844032798720"&gt;Image credit&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Translation note
&lt;/h2&gt;

&lt;p&gt;認証・鍵交換: Certification/Key exchange&lt;br&gt;
優先度制御: Priority control&lt;br&gt;
多重化: Multiplexing&lt;br&gt;
暗号化: Encryption&lt;br&gt;
トランスポート: Transport&lt;/p&gt;

&lt;p&gt;Hope it helps you understand what they are :)&lt;/p&gt;

</description>
      <category>quic</category>
      <category>http3</category>
    </item>
    <item>
      <title>Do you really need Docker or Kubernetes in your system?</title>
      <dc:creator>Kohei Ota</dc:creator>
      <pubDate>Thu, 04 Oct 2018 04:52:51 +0000</pubDate>
      <link>https://forem.com/inductor/do-you-really-need-docker-or-kubernetes-in-your-system-11nk</link>
      <guid>https://forem.com/inductor/do-you-really-need-docker-or-kubernetes-in-your-system-11nk</guid>
      <description>&lt;h2&gt;
  
  
  Abstract
&lt;/h2&gt;

&lt;p&gt;From several years ago, Docker has given us the very strong ecosystem that makes your code work on pretty much everywhere with the essential components in one minimized unit just like a physical "container".&lt;/p&gt;

&lt;p&gt;As for Kubernetes, it gave a very congregative platform not just for the operating environment integrated with the containerized system based on what Docker created, but also with logging, monitoring and so on.&lt;/p&gt;

&lt;p&gt;Moreover, the concept of DevOps and SRE have become very important to understand how to operate your system in the modern Internet world to reflect your business demand and updates continuously.&lt;/p&gt;

&lt;p&gt;But here's a question. Do you really need Docker and its ecosystem, or Kubernetes in your system environment?&lt;/p&gt;

&lt;p&gt;Yes, I am asking you, not anybody else. When you decide what technology to use in your system, you have to understand why it matters and how.&lt;/p&gt;

&lt;p&gt;Here are some thoughts of mine for what you should do with containers and what you shouldn't. Please give me your opinions in the comment section if you have :)&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Docker itself is not "production ready".
&lt;/h2&gt;

&lt;p&gt;First of all, Docker is a great platform in many ways. But it triggers a lot of pains especially with Networking, Monitoring and Logging.&lt;br&gt;
It is simply because Docker was created in order to deal with the App execution environment as mentioned above as dotCloud was a PaaS like Heroku.&lt;/p&gt;

&lt;p&gt;It is very easy to handle a single container as one service but you don't really use it as a whole platform. You will need a Web server(or more than that), a Database server, an Application server, and maybe Memcached/RabbitMQ etc...&lt;/p&gt;

&lt;p&gt;Combining those with Docker itself is not that hard, but you can't do clustering, self-healing, replicating because they are not natively provided Docker which is required on system platform in most cases.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Kubernetes is too much for just a web application
&lt;/h2&gt;

&lt;p&gt;So, I mentioned that Docker is too less for a production platform in the previous section. Kubernetes and Docker Swarm solves a lot of those problems.&lt;br&gt;
They both have, in common, clustering, scaling and networking. Kubernetes has more features and it looks good. Yes it does. But it's actually too much for just a single web application. The more you use Kubernetes features, the more complicated it becomes. I have seen lots of people saying this "I just wanted to orchestrate container system smartly. But now I am maintaining the Kubernetes clusters, master node, and etcd everyday." It's a well architected for complicated systems and to keep it available. But do you really need the complexity? I'd say no.(though it really depends!)&lt;/p&gt;

&lt;p&gt;There are lots of products that's on the Kubernetes such as Rancher/OpenShift but none of them would decrease the operation costs for the "features" of Kubernetes to me.(No offence. They are very good tools as well!)&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Docker Swarm is good but...
&lt;/h2&gt;

&lt;p&gt;OK, tell me I'm wrong. I haven't used Swarm much, honestly.&lt;/p&gt;

&lt;p&gt;Anyway, meanwhile Kubernetes is too much, Docker Swarm is lighter and it looks the best to deal with smaller applications. The performance is actually much faster than Kubernetes as well!&lt;/p&gt;

&lt;p&gt;The thing that made me stop to think is that I want to use container orchestration tools for less operations in the beginning. While Kubernetes is supported by lots of cloud benders, Docker Swarm is not. Technically they have tried but not anymore.&lt;br&gt;
It is not very convenient because I, personally, don't really want to use EC2 or any physical machine to manage clusters and stuff. Only if I could make clusters Swarm easily on AWS.... that'd be legendary! &lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjf4xfduawtomjai04lry.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjf4xfduawtomjai04lry.gif" width="245" height="170"&gt;&lt;/a&gt;&lt;br&gt;
Oh and as another thing for me, I'm Japanese and lots of people want Japanese language support for Enterprise solution and Swarm doesn't have it as long as I know.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;The TL;DR is super boring. Know what you are using. New things are cool but it's not perfect and you always have to try comparing what's good and what's not for you :)&lt;/p&gt;

</description>
      <category>docker</category>
      <category>kubernetes</category>
      <category>devops</category>
      <category>container</category>
    </item>
    <item>
      <title>How I learnt English by myself being Japanese</title>
      <dc:creator>Kohei Ota</dc:creator>
      <pubDate>Tue, 27 Mar 2018 06:33:07 +0000</pubDate>
      <link>https://forem.com/inductor/how-i-learnt-english-by-myself-being-japanese-10h4</link>
      <guid>https://forem.com/inductor/how-i-learnt-english-by-myself-being-japanese-10h4</guid>
      <description>&lt;h1&gt;
  
  
  About this post
&lt;/h1&gt;

&lt;p&gt;I believe there are some people who want to learn another language and it can be so varied. English, Spanish, French, Korean, Chinese... Yes, there are too many to count.&lt;/p&gt;

&lt;p&gt;Today I want to share how I learnt English from the level I could not even say this simple sentence "I am 19 years old." to the level that I can contribute an OSS community as an interpreter, though not simultaneously.&lt;/p&gt;

&lt;p&gt;I said Japanese just 'cause Japanese and English are very different and what I basically want to say by this is it's not too late to try if you could not deal with a language very well when you were young.&lt;/p&gt;

&lt;h1&gt;
  
  
  Who are you?
&lt;/h1&gt;

&lt;p&gt;I am not a great person. Just a native Japanese speaker who likes eating and tinkering with computers.&lt;/p&gt;

&lt;h1&gt;
  
  
  You must have been to a good college/university
&lt;/h1&gt;

&lt;p&gt;I did not even go to a university. I went to a science college thing which is like a technical high school and college combined. It's a special type of school even in my country so I don't really know how to describe this but I was just a slacker as I dropped out anyway :)&lt;/p&gt;

&lt;h1&gt;
  
  
  So how did you do this?
&lt;/h1&gt;

&lt;p&gt;I don't actually think methods really matter. But you need some of these mindsets.&lt;/p&gt;

&lt;h2&gt;
  
  
  Have a short-term goals and long-term goals.
&lt;/h2&gt;

&lt;p&gt;You need an object when you try to aim at something. Making an effort for nothing particularly is not very efficient and you should have something realistically possible.&lt;br&gt;
Think of yourself what you want to do in the future with using the target language and if you want to do it, you need to keep trying.&lt;/p&gt;

&lt;p&gt;Short-term goals are very important to make yourself keep trying. Long-term goals can be really boring sometimes simply because it takes so much time. Setting short-term goals that can be archived possible makes you feel better whenever you make the achievement and can be a good sign to show you are actually improving. Short-term goals are something like "memorizing 100 words", "passing some level of an exam" and "being able to say some silly jokes in the language".&lt;/p&gt;

&lt;p&gt;Long-term goals are very important to make yourself not get easily "satisfied" with yourself. If you want to be really good at something you should just keep making an effort no matter how you're told you're good. Surprise yourself in the next few years with the effort you will have made :)&lt;/p&gt;

&lt;h2&gt;
  
  
  Know the difference between holding conversations and reading/writing technical/business sentences
&lt;/h2&gt;

&lt;p&gt;Honestly I am the best at speaking in English and my writing is frigging bad. I could use to express how bad I am at writing but not for now ;P I can write stupid things on IRC, enjoy sitcom without subtitles, say lame jokes to my Aussie girlfriend and even have a serious/huge argument with her.&lt;br&gt;
Even so, I cannot write completely "natural" English like a native speaker because I am lacking of vocabulary and practice. You need to practice literally every day to be really good at language. No matter what. It is really hard to be a complete bilingual without knowing those languages from childhood.&lt;/p&gt;

&lt;p&gt;I know a lot of Japanese people who can comprehend English articles. But mostly they translate into Japanese in their brain and break it down slowly to understand. They can write enough good English to tell what they want to say in E-mails too but can't talk a lot including daily conversation because they have not practiced a lot.&lt;/p&gt;

&lt;p&gt;In my opinion, all of the language skills; reading, writing, listening, speaking, are separated but strongly related at the same time. If you want to be good in general, you have to practice all of them evenly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Do not mind your mistakes too much, but care a bit.
&lt;/h2&gt;

&lt;p&gt;A lot of people say "I'm afraid of making mistakes." but it will hold you back when you want to improve. Fake confidence can be a really strong weapon sometimes because you can pretend you are so sure about what you're saying.&lt;br&gt;
Think of a man who's making a speech, without confident, his voice would be so low and with his mumbling you can't hear it.&lt;/p&gt;

&lt;p&gt;But don't rely on the "fake" confidence too much. It does not mean you don't have to make an effort. You have to know you need to keep trying while you don't look like so.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enjoy what you are doing
&lt;/h2&gt;

&lt;p&gt;Language is just a tool. You use it to express yourself, enjoy contents from other culture, understand the culture and share ideas to/from the world. It is not just your goal and more, what really matters is what you want to do with the tool.&lt;/p&gt;

&lt;p&gt;This is what I have been doing to learn English for these seven years. I didn't have anyone correct this so this is purely my "English". I'm sorry if I wrote something wrong. But I hope everyone will understand this and learn something from this post.&lt;/p&gt;

&lt;p&gt;Thank you for reading.&lt;/p&gt;

&lt;p&gt;Kohei Ota&lt;/p&gt;

</description>
      <category>english</category>
      <category>language</category>
      <category>linguistic</category>
      <category>japanese</category>
    </item>
  </channel>
</rss>
