{"componentChunkName":"component---src-templates-post-template-jsx","path":"/history/posts/2022-04-10--001","result":{"data":{"site":{"siteMetadata":{"title":"Blog by Eunyoung","subtitle":"작업 기록 블로그","copyright":"© All rights reserved.","author":{"name":"EunYoung","twitter":"#"},"disqusShortname":"","url":"https://ssongey.github.io"}},"markdownRemark":{"id":"e1737c31-5c94-5545-98e7-af77afd93f5f","html":"<p><span class=\"title__sub1\"> 1. Controller </span></p>\n<ul>\n<li>서비스를 관리하고 운영하는데 도움을 준다.</li>\n<li>아래 기능들을 제공한다.\n\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/devHistoryBlog/static/4beec172275f8b72b7b840cad4ffc261/4b7ac/10-001-01.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n  \n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block;  max-width: 960px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 51.25000000000001%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAABYlAAAWJQFJUiTwAAACJ0lEQVQozz2SCU/bQBCF/f//QKX+BVQVgdSIqqgtIlVogXCkCJPLieM4cXyu7ytfJ4Ziabyr3dk3770ZTaUuSebje2P83ZwyVdRVRVWWEjl1LfuqJk49VLohzQOixKaoUvYgdyWN5DdNS9Pu0WSllZ8a/8Hsf5Z1QLHVKYIVVabkQSWgNUmuCOKIUAqmUYD/1McefqNwDZRE7K+J3DVaXbeUWUbm2rQHNp4lSSvKJKSWQlVXvWa5GzG27xhv7tjtTGJrjDKfySILw75lub5mZvTRpn8H6KMfWMLKcV2M5Q3GeoQf+iK9fgdc7B55tm55sYdsLZ1W7DhITbwZM3PAYnXFZPIT7eLLEWdfj7h9uGI2nfC93+P84pTFct758iq5YuWPMNwH5rshKnZo8liUpSSyXzo3mM5QmP5GiwKPMAzE8Jji4FVaEKuUoig67w6Ah8jLhEKiqsu385qylLuuaVl3XjUVWlYp8iIk2j4R2SIlCdiLxFY69r8hh8iLhDQLX8+ahvDlF8vLI9RkQCVvuqmQIhpvXzi+xhycEi2GhIkjTCMBat5Bu7GQOIDVaUDjzqlzGStnRpNJbtt046a9TPvo9+fEGx2hiLW5Z/B8zHx9z77lTXJJnEQEQYDnKjxnzPXjCTP7CS/Q2VgjHCckTVM0x5/j7KZkSoxWLhsZj+GshykWtG+AZVkQRh6GqfOp94GNu6Q/POHyqieMpWHbKcdnHzFWOv8A2jru44tAPy4AAAAASUVORK5CYII='); background-size: cover; display: block;\"\n    >\n      <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"10 001 01\"\n        title=\"\"\n        src=\"/devHistoryBlog/static/4beec172275f8b72b7b840cad4ffc261/d9199/10-001-01.png\"\n        srcset=\"/devHistoryBlog/static/4beec172275f8b72b7b840cad4ffc261/8ff5a/10-001-01.png 240w,\n/devHistoryBlog/static/4beec172275f8b72b7b840cad4ffc261/e85cb/10-001-01.png 480w,\n/devHistoryBlog/static/4beec172275f8b72b7b840cad4ffc261/d9199/10-001-01.png 960w,\n/devHistoryBlog/static/4beec172275f8b72b7b840cad4ffc261/07a9c/10-001-01.png 1440w,\n/devHistoryBlog/static/4beec172275f8b72b7b840cad4ffc261/29114/10-001-01.png 1920w,\n/devHistoryBlog/static/4beec172275f8b72b7b840cad4ffc261/4b7ac/10-001-01.png 3444w\"\n        sizes=\"(max-width: 960px) 100vw, 960px\"\n      />\n    </span>\n  </span>\n  \n  </a>\n    </li>\n</ul>\n<br/>\n<p><span class=\"title__sub2\"> 1.1 Auto Healing </span></p>\n<ul>\n<li>파드에 문제가 생기거나 또는 파드를 스케줄링하는 노드가 다운이 될 경우 컨트롤러가 인지하여 새로운 노드에 파드를 재생성</li>\n<li>\n<p>종류: </p>\n<ul>\n<li>ReplicationController</li>\n<li>ReplicaSet</li>\n<li>StatusfulSet</li>\n<li>DaemonSet</li>\n</ul>\n</li>\n</ul>\n<br/>\n<p><span class=\"title__sub2\"> 1.2 Auto Scaling </span></p>\n<ul>\n<li>파드의 리소스 상태가 limited 되었을 경우 컨트롤러가 인지하여 자동으로 파드를 한개 더 생성</li>\n<li>부하분산 및 파드가 죽지 않도록 함</li>\n<li>\n<p>종류: </p>\n<ul>\n<li>HPA</li>\n</ul>\n</li>\n</ul>\n<br/>\n<p><span class=\"title__sub2\"> 1.3 Software Update </span></p>\n<ul>\n<li>여러 파드에 대한 업그레이드를 지원한다.</li>\n<li>업그레이드 도중 문제 발생시에 롤백도 지원한다.</li>\n<li>\n<p>종류:</p>\n<ul>\n<li>Deployment</li>\n</ul>\n</li>\n</ul>\n<br/>\n<p><span class=\"title__sub2\"> 1.4 Job </span></p>\n<ul>\n<li>일시적인 작업이 필요할 경우 파드를 생성하여 작업을 수행하고, 완료 후에는 자원을 반납한다.</li>\n<li>효율적인 자원 사용이 가능</li>\n<li>\n<p>종류:</p>\n<ul>\n<li>CronJob</li>\n<li>Job</li>\n</ul>\n</li>\n</ul>\n<br/>\n<p><span class=\"title__sub1\"> 2. Replication Controller/ ReplicaSet </span></p>\n<ul>\n<li>Replication Controller는 deprecated 되었고, 대체로 ReplicaSet을 사용한다.</li>\n<li>둘다 template, replicas 기능을 가지고 있다.</li>\n<li>ReplicaSet에는 selector 기능이 추가되었다.</li>\n</ul>\n<br/>\n<p><span class=\"title__sub2\"> 2.1. Template  </span>\n\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/devHistoryBlog/static/018ce6a8d275e1367934ed65ffb5107a/60b6a/10-001-02.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n  \n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block;  max-width: 960px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 30.41666666666667%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAAAsTAAALEwEAmpwYAAABW0lEQVQY02WQS2vbQBRG8/93he67K6V0VyjULRRS0pSkKcapHXv0tKRoJLmeeCSNHpadk7FassmFDwbucPjOPWtNxWGnUGliE9E/bDCmxHQVXdfhuT5ZltP3PWG45naxYp1ItmpHGOd4fkhZ6nF/+n+mc5+b81f8/voa8f0t8fQjUs5wkx+0bc3cXRImkX23iOUS13HYbreYuiawwCQtRtBpPwKNVvxZfCK4myDFFbF3w76qGGrDvt/j+A7+OqCuaqLAs41X1sDQ2MhCsXBiC2tG2AjcVBHX1x8oSp/p6jOB/IVIL5n6X+j2htzqCiFQSpEXOXMxR2tN2zT8VZqlE9E0xsL+K683t3xbvcHJfnLpvWeWTJjFEy7cd1TmgcNwZBiGMXlRWOAdMpNUZYkua9wgHU9wUm5bC+TIv3nkxRyPj8+w4TCMqpnMSFNJeWppG7mhRLgh97Jgpw1PJt6+dQHQ+KYAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n    >\n      <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"10 001 02\"\n        title=\"\"\n        src=\"/devHistoryBlog/static/018ce6a8d275e1367934ed65ffb5107a/d9199/10-001-02.png\"\n        srcset=\"/devHistoryBlog/static/018ce6a8d275e1367934ed65ffb5107a/8ff5a/10-001-02.png 240w,\n/devHistoryBlog/static/018ce6a8d275e1367934ed65ffb5107a/e85cb/10-001-02.png 480w,\n/devHistoryBlog/static/018ce6a8d275e1367934ed65ffb5107a/d9199/10-001-02.png 960w,\n/devHistoryBlog/static/018ce6a8d275e1367934ed65ffb5107a/07a9c/10-001-02.png 1440w,\n/devHistoryBlog/static/018ce6a8d275e1367934ed65ffb5107a/60b6a/10-001-02.png 1559w\"\n        sizes=\"(max-width: 960px) 100vw, 960px\"\n      />\n    </span>\n  </span>\n  \n  </a>\n    </p>\n<ul>\n<li>컨트롤러와 파드는 label과 selector로 연결이 된다. (서비스와 동일)</li>\n<li>컨트롤러를 만들때 template에 파드 내용을 저장하고, 컨트롤러에서 파드를 재생성 할 경우 해당 template 내용을 참고한다.</li>\n<li>\n<p>파드의 버전을 업데이트 하는 방법</p>\n<ul>\n<li>먼저 template의 파드 내용을 업데이트 한 후, </li>\n<li>기존에 연결되어 있는 파드를 다운</li>\n<li>업데이트된 template로 파드 재생성 </li>\n</ul>\n</li>\n</ul>\n<br/>\n<p><span class=\"title__sub2\"> 2.2. Replicas  </span>\n\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/devHistoryBlog/static/b45a6f1ef35221375a6e481be3c6b5e4/a8a6f/10-001-03.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n  \n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block;  max-width: 960px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 42.083333333333336%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB20lEQVQoz0WRW0/bQBCF8+f71se+96WiQipIvQBFUKhUFBAJEBJydRKMEzuO43W8tteO44SvGxepK420O6M5+s7ZipIC6VkE7gvLuUUiHLJUkYYeKrB170XPTOLAKd+ZitlstxiDAdWbGo/tASPTpj+y8BaCinLH2LUT6kefeTo/IOxVWSURidVicX9GS/ceT/ax/nxHNn+hlh7bVzAMg/uHBsPhCMuasAwlcRxTkeMG0fUe5sF7ZscfkLVD0lginy4Y7b1DXHxk3vtG5+GQcX1fO5iyBazhELPTRXgLwiBAKUWSJFTCaR//4ZjJ70+4118QzXNWaUI4usOu7iPuj5j0zmg3vmLoexL+I5xPJ7Sbt8yDOWmalnSlYJ4X5Otci8SkkdALC/JMlRSLkckqW7PdwDrR2a3WFMVWV4HvedxeXWH0B0TRTuxNMIxdZOIgoynhrsJn0lXEptjgNB6JhU+UzvTcRsoXVBZSrAtivdx2DMYz/ZnhshQrM+w5l3Rmp/Rcbcv+Scf9gbvsl1S7k28yOvYphnfJk32EHbR51fi+79Md9JjMbS0el7Z3OVaEdAii/+XLCbFastYUea6jWGVvsxlCO4hUUBLulrv6U+7qd7SaLZ5NEyEEfwGA7UylVoXXFAAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n    >\n      <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"10 001 03\"\n        title=\"\"\n        src=\"/devHistoryBlog/static/b45a6f1ef35221375a6e481be3c6b5e4/d9199/10-001-03.png\"\n        srcset=\"/devHistoryBlog/static/b45a6f1ef35221375a6e481be3c6b5e4/8ff5a/10-001-03.png 240w,\n/devHistoryBlog/static/b45a6f1ef35221375a6e481be3c6b5e4/e85cb/10-001-03.png 480w,\n/devHistoryBlog/static/b45a6f1ef35221375a6e481be3c6b5e4/d9199/10-001-03.png 960w,\n/devHistoryBlog/static/b45a6f1ef35221375a6e481be3c6b5e4/07a9c/10-001-03.png 1440w,\n/devHistoryBlog/static/b45a6f1ef35221375a6e481be3c6b5e4/a8a6f/10-001-03.png 1516w\"\n        sizes=\"(max-width: 960px) 100vw, 960px\"\n      />\n    </span>\n  </span>\n  \n  </a>\n    </p>\n<ul>\n<li>replicas 만큼 파드가 관리된다.</li>\n<li>pod를 따로 정의하지 않고 ReplicationController만 정의하게 되면, 정의된 template 내용으로 replica 개수 만큼 파드를 자동 생성해준다</li>\n</ul>\n<br/>\n<p><span class=\"title__sub2\"> 2.3. Selector </span>\n\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/devHistoryBlog/static/450d1802d2298971102c7b3008591fda/b67f3/10-001-04.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n  \n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block;  max-width: 960px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 29.583333333333332%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAABYlAAAWJQFJUiTwAAABLElEQVQY04WOXUvCYBiG/b+ddRYRdFD/oLMgooOEEDGJ6iBGJRt+t5Zm+TFN1OnC9J2bbn5dTS2CSLrhOnhuuC+eAH7m8/mSRTyjQF45JX17jPkiMWoV8cpxpnqKRuKa0t05zqvMpBLHfVOZTqd8OxYJ/Ahny2JQjXEZ3yQob/CoHeBVVLxshMlDFDsRQihnqzsbxn2W/hf2dQUptcdFegdNPcTVNZxUmGEm6hNZMsr68mQIOycx+xL9IVwV44mL3TcxayUc0cFyTFqdEs1OGWvUxXEFrXadD6uDO3ZYzebrP+x5TaLVfU4yW8SMIwq9K0JPuwTVbbRuhO5QJ1u8ofKexHKNhWuhW/+h7fUoi3uqQqYuMrREjppQ0C2ZhqVhDPLUB0mfBGLU5vf+E9pJu7lUhBsPAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n    >\n      <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"10 001 04\"\n        title=\"\"\n        src=\"/devHistoryBlog/static/450d1802d2298971102c7b3008591fda/d9199/10-001-04.png\"\n        srcset=\"/devHistoryBlog/static/450d1802d2298971102c7b3008591fda/8ff5a/10-001-04.png 240w,\n/devHistoryBlog/static/450d1802d2298971102c7b3008591fda/e85cb/10-001-04.png 480w,\n/devHistoryBlog/static/450d1802d2298971102c7b3008591fda/d9199/10-001-04.png 960w,\n/devHistoryBlog/static/450d1802d2298971102c7b3008591fda/b67f3/10-001-04.png 1338w\"\n        sizes=\"(max-width: 960px) 100vw, 960px\"\n      />\n    </span>\n  </span>\n  \n  </a>\n    </p>\n<ul>\n<li>\n<p>Replication Controller의 경우 label 이 동일할 경우만 연결이 된다.</p>\n<ul>\n<li>label의 key와 value 중 하나라도 값이 다를 경우 연결하지 않는다</li>\n</ul>\n</li>\n<li>ReplicaSet의 경우 matchLabels 와 matchExpressions 을 제공한다.</li>\n</ul>\n<br/>\n<p><span class=\"title__sub3\"> 2.3.1 Match Labels </span>\n\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/devHistoryBlog/static/2d8b90afea081a137fcadeb70e3cc3a5/47218/10-001-05.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n  \n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block;  max-width: 960px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 29.583333333333332%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAABYlAAAWJQFJUiTwAAABOElEQVQY04WOy0sCARCH/T87dO9W0KFTt0CILkWHhOhx8KCQIRIKPTRZynZ9v9FUdFcrwsdu666r+7UqEQTSD4ZhPmY+xoUT27YXNY/ZK5IWTondH9MphjCUKq20n3LiklLUSz16jVaKYdUExg2J6dTixzGP61c4WwC1GedK2MATXec55cZspAjFNvFE1hBje+iCn/GLD0v0YeQj/wtHLYl4+oDbwj753DnjZpGn7CHhvJuqdIIpBTGyN+hSAK3wwGw2WyVcgsnUZDjsIr+WnC4z1BV6coVOLYM6ktHMAc1OnQ9nx7B05mc29uoPB6ZCoLHLWXKLO+WIfD+It7jDRW4b8dPLu15GqoepvD3SN9pz2yrhEuiTIa1RgvaXiKxm6Kll2qpIWxNR1IIzl+hoSYdJDMZd/t5/A2mzt/IPVOX1AAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n    >\n      <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"10 001 05\"\n        title=\"\"\n        src=\"/devHistoryBlog/static/2d8b90afea081a137fcadeb70e3cc3a5/d9199/10-001-05.png\"\n        srcset=\"/devHistoryBlog/static/2d8b90afea081a137fcadeb70e3cc3a5/8ff5a/10-001-05.png 240w,\n/devHistoryBlog/static/2d8b90afea081a137fcadeb70e3cc3a5/e85cb/10-001-05.png 480w,\n/devHistoryBlog/static/2d8b90afea081a137fcadeb70e3cc3a5/d9199/10-001-05.png 960w,\n/devHistoryBlog/static/2d8b90afea081a137fcadeb70e3cc3a5/47218/10-001-05.png 1344w\"\n        sizes=\"(max-width: 960px) 100vw, 960px\"\n      />\n    </span>\n  </span>\n  \n  </a>\n    </p>\n<ul>\n<li>Replication Controller 의 selector 와 같이 label이 동일할 경우 연결을 한다.</li>\n</ul>\n<br/>\n<p><span class=\"title__sub3\"> 2.3.2 Match Expressions </span>\n\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/devHistoryBlog/static/6b49105750db439606fd497427ef893e/913a1/10-001-08.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n  \n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block;  max-width: 960px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 33.75%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAHCAYAAAAIy204AAAACXBIWXMAABYlAAAWJQFJUiTwAAABxklEQVQozx2RS2/aUBBG+a2VsuuP6KLddFOpuy6qLqooUtNnWpGkAqoSIAmv2DwMmJhrGxNjsLF5Yx46vWWkM4tZzOh8k/AtC9+0iKcB22XEIZpIQoZCZ2x22IXuke08gN2auakiqmn28zH/a2UpiPtfbGY+spF4LP+hW8owtZssPEGklwj1Ms2bK7TsJZNOWc7KLL0e7GNmnQKdwgW7aHhcuDaKdLKfWUbywHZJ4jz/nI/ZE5rqewL9hrP0CafpZ9zenfIt+ZvL9DWFuzSeaOBP+jTMInVRQnfbjGYuWl+RPNCwVNbzIYlG6weq9pVBN09ka9Tr5yi1M3TlGrWSR29V6DaLRK5gNh9hBya218GNHKJVSD8Q2AMVZ2ITL0Yk3LDNo1UkXFmEmz6GU8YaVlnEHttdgGnVWe9DYqnDfstCy/GQTbKcTY/Kh0GLWuoTnvsEsczwQ+E1b69ekTe/c29f8ObnC95lXqJ5f6VGmy+pJNVeldU6YLUMETLDSiWFM7LYHLY4vTKqkqHrGBxWAQnHHzAIhoynI/yphzN2JQMmUs8JbIR8lDUWHORDnlyNSi9HTeRoiALOsEHVyFK3b1GMPAvf4B9atfRvSW3DHQAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n    >\n      <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"10 001 08\"\n        title=\"\"\n        src=\"/devHistoryBlog/static/6b49105750db439606fd497427ef893e/d9199/10-001-08.png\"\n        srcset=\"/devHistoryBlog/static/6b49105750db439606fd497427ef893e/8ff5a/10-001-08.png 240w,\n/devHistoryBlog/static/6b49105750db439606fd497427ef893e/e85cb/10-001-08.png 480w,\n/devHistoryBlog/static/6b49105750db439606fd497427ef893e/d9199/10-001-08.png 960w,\n/devHistoryBlog/static/6b49105750db439606fd497427ef893e/07a9c/10-001-08.png 1440w,\n/devHistoryBlog/static/6b49105750db439606fd497427ef893e/913a1/10-001-08.png 1476w\"\n        sizes=\"(max-width: 960px) 100vw, 960px\"\n      />\n    </span>\n  </span>\n  \n  </a>\n    </p>\n<ul>\n<li>label의 key와 value를 좀 더 상세하게 컨트롤할 수 있다.</li>\n<li>operator에는 Exists, DoesNotExist, In, NotIn 이 존재한다.</li>\n<li>잘 사용하지 않는다.</li>\n</ul>\n<br/>\n<p><span class=\"title__sub2\"> 2.4. ReplicationController에서 ReplicaSet으로 변경방법 </span>  </p>\n<ol>\n<li>\n<p>아래 명령어로 연결된 pod는 지우지 않고 ReplicationController만 삭제</p>\n<div class=\"gatsby-highlight\" data-language=\"shell\"><pre class=\"language-shell\"><code class=\"language-shell\">$ kubectl delete replicationcontrollers replication1 --cascade<span class=\"token operator\">=</span>false</code></pre></div>\n</li>\n<li>pod가 지워지지 않았는지 확인</li>\n<li>\n<p>ReplicaSet 생성</p>\n<div class=\"gatsby-highlight\" data-language=\"yaml\"><pre class=\"language-yaml\"><code class=\"language-yaml\"><span class=\"token key atrule\">apiVersion</span><span class=\"token punctuation\">:</span> apps/v1\n<span class=\"token key atrule\">kind</span><span class=\"token punctuation\">:</span> ReplicaSet\n<span class=\"token key atrule\">metadata</span><span class=\"token punctuation\">:</span>\n<span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> replica2\n<span class=\"token key atrule\">spec</span><span class=\"token punctuation\">:</span>\n<span class=\"token key atrule\">replicas</span><span class=\"token punctuation\">:</span> <span class=\"token number\">2</span>\n<span class=\"token key atrule\">selector</span><span class=\"token punctuation\">:</span>\n<span class=\"token key atrule\">matchLabels</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">cascade</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"false\"</span>\n<span class=\"token key atrule\">template</span><span class=\"token punctuation\">:</span>\n<span class=\"token key atrule\">metadata</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">labels</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">cascade</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"false\"</span>\n<span class=\"token key atrule\">spec</span><span class=\"token punctuation\">:</span> <span class=\"token comment\">#아래 스펙내용은 기존 ReplicationController 와 동일하게</span>\n  <span class=\"token key atrule\">containers</span><span class=\"token punctuation\">:</span>\n  <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> container\n    <span class=\"token key atrule\">image</span><span class=\"token punctuation\">:</span> kubetm/app<span class=\"token punctuation\">:</span>v1</code></pre></div>\n</li>\n</ol>\n<br/>\n<p><span class=\"title__sub2\"> 2.5. ReplicaSet 샘플 </span></p>\n<div class=\"gatsby-highlight\" data-language=\"yaml\"><pre class=\"language-yaml\"><code class=\"language-yaml\"><span class=\"token key atrule\">apiVersion</span><span class=\"token punctuation\">:</span> apps/v1\n<span class=\"token key atrule\">kind</span><span class=\"token punctuation\">:</span> ReplicaSet\n<span class=\"token key atrule\">metadata</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> replica1\n<span class=\"token key atrule\">spec</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">replicas</span><span class=\"token punctuation\">:</span> <span class=\"token number\">2</span> <span class=\"token comment\">#파드개수를 replicas 만큼 유지를 시킨다.</span>\n  <span class=\"token key atrule\">selector</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">matchLabels</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">type</span><span class=\"token punctuation\">:</span> web <span class=\"token comment\">#동일한 라벨링 된 파드와 연결이 된다.</span>\n      <span class=\"token key atrule\">ver</span><span class=\"token punctuation\">:</span> v1 <span class=\"token comment\">#만약 template 아래 labels에 존재하지 않는 라벨을 사용할 경우 에러 발생(ex. ver: v3)</span>\n  <span class=\"token key atrule\">template</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">metadata</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> pod1 <span class=\"token comment\">#ReplicaSet이 해당 템플릿으로 Pod를 생성하면 \"pod1\"로 파드명이 만들어지지 않고 임의의 파드명으로 생성된다.</span>\n      <span class=\"token key atrule\">labels</span><span class=\"token punctuation\">:</span>\n        <span class=\"token key atrule\">type</span><span class=\"token punctuation\">:</span> web\n        <span class=\"token key atrule\">ver</span><span class=\"token punctuation\">:</span> v1\n        <span class=\"token key atrule\">ver</span><span class=\"token punctuation\">:</span> v2\n    <span class=\"token key atrule\">spec</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">containers</span><span class=\"token punctuation\">:</span>\n      <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> container\n        <span class=\"token key atrule\">image</span><span class=\"token punctuation\">:</span> kubetm/app<span class=\"token punctuation\">:</span>v1\n      <span class=\"token key atrule\">terminationGracePeriodSeconds</span><span class=\"token punctuation\">:</span> <span class=\"token number\">0</span></code></pre></div>\n<div class=\"gatsby-highlight\" data-language=\"yaml\"><pre class=\"language-yaml\"><code class=\"language-yaml\"><span class=\"token key atrule\">apiVersion</span><span class=\"token punctuation\">:</span> apps/v1\n<span class=\"token key atrule\">kind</span><span class=\"token punctuation\">:</span> ReplicaSet\n<span class=\"token key atrule\">metadata</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> replica1\n<span class=\"token key atrule\">spec</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">replicas</span><span class=\"token punctuation\">:</span> <span class=\"token number\">1</span>\n  <span class=\"token key atrule\">selector</span><span class=\"token punctuation\">:</span> \n    <span class=\"token comment\">#matchLabels, matchExpressions 두 조건 모두 들어갈 수 있다. or 조건이다. (matchLabels or matchExpressions)</span>\n    <span class=\"token comment\">#template 아래 labels에 존재하는 라벨만 사용가능</span>\n    <span class=\"token key atrule\">matchLabels</span><span class=\"token punctuation\">:</span> \n      <span class=\"token key atrule\">type</span><span class=\"token punctuation\">:</span> web\n      <span class=\"token key atrule\">ver</span><span class=\"token punctuation\">:</span> v1\n    <span class=\"token key atrule\">matchExpressions</span><span class=\"token punctuation\">:</span>\n    <span class=\"token punctuation\">-</span> <span class=\"token punctuation\">{</span><span class=\"token key atrule\">key</span><span class=\"token punctuation\">:</span> type<span class=\"token punctuation\">,</span> <span class=\"token key atrule\">operator</span><span class=\"token punctuation\">:</span> In<span class=\"token punctuation\">,</span> <span class=\"token key atrule\">values</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span>web<span class=\"token punctuation\">]</span><span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">-</span> <span class=\"token punctuation\">{</span><span class=\"token key atrule\">key</span><span class=\"token punctuation\">:</span> ver<span class=\"token punctuation\">,</span> <span class=\"token key atrule\">operator</span><span class=\"token punctuation\">:</span> Exists<span class=\"token punctuation\">}</span>\n  <span class=\"token key atrule\">template</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">metadata</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">labels</span><span class=\"token punctuation\">:</span>\n        <span class=\"token key atrule\">type</span><span class=\"token punctuation\">:</span> web\n        <span class=\"token key atrule\">ver</span><span class=\"token punctuation\">:</span> v1\n        <span class=\"token key atrule\">location</span><span class=\"token punctuation\">:</span> dev\n    <span class=\"token key atrule\">spec</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">containers</span><span class=\"token punctuation\">:</span>\n      <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> container\n        <span class=\"token key atrule\">image</span><span class=\"token punctuation\">:</span> kubetm/app<span class=\"token punctuation\">:</span>v1\n      <span class=\"token key atrule\">terminationGracePeriodSeconds</span><span class=\"token punctuation\">:</span> <span class=\"token number\">0</span></code></pre></div>\n<br/>\n<p><span class=\"title__sub1\"> 3. Deployment  </span>\n\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/devHistoryBlog/static/88ce1a0d4ee56f6bb0c5891141343292/dd507/10-001-13.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n  \n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block;  max-width: 960px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 35.833333333333336%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAHCAYAAAAIy204AAAACXBIWXMAABYlAAAWJQFJUiTwAAABKElEQVQoz42RyU4CQRRF+WY/woV7Fy7ElXFIcEhciBqJsECZRQW7QRRIoBtikKHpqaqP1QiGuGkrqdykct/JfbdiLE8QBAuVUiCEiysklmtju3OmrkfeGJGqv/Fkjpl7PoGUyieUX/7Ohhr7C/QVbDDT0cwq3YmOMW1S6z9S7FVoD3uMZg6e7y9AITC8kcBC54Sz+y0q7QSvZpLT7CYZLY7jfy48K1AIjUwo7Qmj9zRG85pO8ZxBOcmsm8PqFhCei1S+ddi/gNXnA5L5Heq5Pcxsgkbjjo9aCmv8hav6WyWM6PBHwwTI5ZsAp9XG1TSMfImXm1v6hRK23sDSdJXYi04YBGHZPr5UP+kLyqld9o83KF9uMzyM07tK8JA5opW+UNs4CDW3DvwG5PgT1lJVnHUAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n    >\n      <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"10 001 13\"\n        title=\"\"\n        src=\"/devHistoryBlog/static/88ce1a0d4ee56f6bb0c5891141343292/d9199/10-001-13.png\"\n        srcset=\"/devHistoryBlog/static/88ce1a0d4ee56f6bb0c5891141343292/8ff5a/10-001-13.png 240w,\n/devHistoryBlog/static/88ce1a0d4ee56f6bb0c5891141343292/e85cb/10-001-13.png 480w,\n/devHistoryBlog/static/88ce1a0d4ee56f6bb0c5891141343292/d9199/10-001-13.png 960w,\n/devHistoryBlog/static/88ce1a0d4ee56f6bb0c5891141343292/07a9c/10-001-13.png 1440w,\n/devHistoryBlog/static/88ce1a0d4ee56f6bb0c5891141343292/dd507/10-001-13.png 1528w\"\n        sizes=\"(max-width: 960px) 100vw, 960px\"\n      />\n    </span>\n  </span>\n  \n  </a>\n    </p>\n<ul>\n<li>ReplicaSet 기능을 포함하며 배포/ 버전업데이트에 도움이 되는 컨트롤러</li>\n<li>Deployment에 RelicaSet에 대한 정보를 같이 기입한다</li>\n<li>Deployment를 적용하면 ReplicaSet을 생성 하게되고, 이 ReplicaSet이 replica 개수만큼 파드를 만들게 된다.</li>\n</ul>\n<br/>\n<p><span class=\"title__sub2\"> 3.1. ReCreate </span>\n\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/devHistoryBlog/static/a9c5774d39e119310a50a21a4795dfa4/88820/10-001-09.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n  \n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block;  max-width: 960px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 37.083333333333336%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAHCAYAAAAIy204AAAACXBIWXMAABYlAAAWJQFJUiTwAAABe0lEQVQoz32RW2/TQBCF/f//AA888gBvSAghgZCKqKCNErXQKiW0zmJix44dO7aT+La79tfBEZcnRppZHe3umXNmnPaY0x0ydH2k6zraqjzhphLcCi7ojjs6wVprhmH4bzpNnpItb9jeT9FCYO1AspiRulcjgek08d0lubqht/2fj/xKCUFjPSU4SeGRH+KRSBtDmiiK/V8cr+fsy4RyH5DmHr9jpJAG//KNCt1owiZ3pTsYKd7yM9tM0ctbbTTKPacoI6LCxd/O0UNPddihbq+Y/PT4lmXUtqEyFY1pcGxvRI0Re2acoTadYIsRdW3bYqwe762cwoWKLzifPOXD2RNUdsncf8e1+5Lp9+ess1uxvAsoZQlW5BshzcsYP/REVYk1VmyGhFFAFPscZYHhesZ8+ozwyxuKYIFavEfNXrBZvCVLXRwVfCXJVmJ5EFU9QfyAHy2p60awZRXdEacRwWbJJj3NsKpqri9e8ePja9afzkge5jLjFft6xyP85hGoi2OtDgAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n    >\n      <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"10 001 09\"\n        title=\"\"\n        src=\"/devHistoryBlog/static/a9c5774d39e119310a50a21a4795dfa4/d9199/10-001-09.png\"\n        srcset=\"/devHistoryBlog/static/a9c5774d39e119310a50a21a4795dfa4/8ff5a/10-001-09.png 240w,\n/devHistoryBlog/static/a9c5774d39e119310a50a21a4795dfa4/e85cb/10-001-09.png 480w,\n/devHistoryBlog/static/a9c5774d39e119310a50a21a4795dfa4/d9199/10-001-09.png 960w,\n/devHistoryBlog/static/a9c5774d39e119310a50a21a4795dfa4/07a9c/10-001-09.png 1440w,\n/devHistoryBlog/static/a9c5774d39e119310a50a21a4795dfa4/29114/10-001-09.png 1920w,\n/devHistoryBlog/static/a9c5774d39e119310a50a21a4795dfa4/88820/10-001-09.png 2564w\"\n        sizes=\"(max-width: 960px) 100vw, 960px\"\n      />\n    </span>\n  </span>\n  \n  </a>\n    </p>\n<ul>\n<li>v1의 파드를 모두 삭제시킨 후 v2의 파드를 실행</li>\n<li>다운타임이 발생</li>\n<li>별도의 자원 사용량이 필요없음</li>\n<li>상세플로우<br>\n1.기존 ReplicaSet의 replica를 0으로 변경<br>\n2.기존 파드 삭제<br>\n3.(다운타임 발생)<br>\n4.새 ReplicaSet 생성<br>\n5.파드생성<br>\n6.서비스와 연결됨  </li>\n</ul>\n<p>Recreate Deployment 리소스파일</p>\n<div class=\"gatsby-highlight\" data-language=\"yaml\"><pre class=\"language-yaml\"><code class=\"language-yaml\"><span class=\"token key atrule\">apiVersion</span><span class=\"token punctuation\">:</span> apps/v1\n<span class=\"token key atrule\">kind</span><span class=\"token punctuation\">:</span> Deployment\n<span class=\"token key atrule\">metadata</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> deployment<span class=\"token punctuation\">-</span><span class=\"token number\">1</span>\n<span class=\"token key atrule\">spec</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">selector</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">matchLabels</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">type</span><span class=\"token punctuation\">:</span> app\n  <span class=\"token key atrule\">replicas</span><span class=\"token punctuation\">:</span> <span class=\"token number\">2</span>\n  <span class=\"token key atrule\">strategy</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">type</span><span class=\"token punctuation\">:</span> Recreate <span class=\"token comment\">#type 설정</span>\n  <span class=\"token key atrule\">revisionHistoryLimit</span><span class=\"token punctuation\">:</span> <span class=\"token number\">1</span> <span class=\"token comment\">#삭제하지 않고 유지 할 ReplicaSet 개수, 기본값은 10</span>\n  <span class=\"token key atrule\">template</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">metadata</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">labels</span><span class=\"token punctuation\">:</span>\n        <span class=\"token key atrule\">type</span><span class=\"token punctuation\">:</span> app\n    <span class=\"token key atrule\">spec</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">containers</span><span class=\"token punctuation\">:</span>\n      <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> container\n        <span class=\"token key atrule\">image</span><span class=\"token punctuation\">:</span> kubetm/app<span class=\"token punctuation\">:</span>v1\n      <span class=\"token key atrule\">terminationGracePeriodSeconds</span><span class=\"token punctuation\">:</span> <span class=\"token number\">10</span></code></pre></div>\n<br/>\n<p><span class=\"title__sub2\"> 3.2. Rolling Update </span>\n\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/devHistoryBlog/static/c5fb1ce173e6af2c3783796df774e4a8/1439b/10-001-10.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n  \n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block;  max-width: 960px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 39.166666666666664%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAABYlAAAWJQFJUiTwAAABlUlEQVQoz12Q2W7bMBBF9f8f1Lc+FAXaAEFdx/USL3JkazNFWYtN7ZJPSaYtgg4wAA/v8PKSTlPVqDyjKgv6rqepGlSR672crussG+2uZ7qupakNl+/cGm4/cIMz9h3Z25LCf2UYekbd+XlD7q2YDI8jRbCzM2PXME4PyvDA1X1haGvGB9zjI+lhzthWOMZVSZ8mu2izgb7vUReXKt5RN8qmVvHhD9+1PqCiLVX4SqsNe32mEkeUv6JttKGXzMhrgSmT5pwuuJYedSWI8j1B+BMpt3o4JSr2hPELl+AH7T3AlTMCf0Z4fqavInbxE86l2KKajMdkDAeEPlTWCZN+2qQvSG4uRaXTT5PV5c0jv/nUSiC0JqX+juuRrrkSZRscG+3xnm7Q8c36b/3Pdv2Bx2H6xyaQKecUrSlVaoWHThWIHcvDV86XjR0Ikz2r4zfbodgj84DF/guuP7d6mkfM1p/5Pv/EMVjgiPSEqgv7RJMyyQK8aInIzvZWY3CK17al1vJbwlv4i0i6Vi9uUmsrfLFBXD1+A7yQXzl9DJMVAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n    >\n      <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"10 001 10\"\n        title=\"\"\n        src=\"/devHistoryBlog/static/c5fb1ce173e6af2c3783796df774e4a8/d9199/10-001-10.png\"\n        srcset=\"/devHistoryBlog/static/c5fb1ce173e6af2c3783796df774e4a8/8ff5a/10-001-10.png 240w,\n/devHistoryBlog/static/c5fb1ce173e6af2c3783796df774e4a8/e85cb/10-001-10.png 480w,\n/devHistoryBlog/static/c5fb1ce173e6af2c3783796df774e4a8/d9199/10-001-10.png 960w,\n/devHistoryBlog/static/c5fb1ce173e6af2c3783796df774e4a8/07a9c/10-001-10.png 1440w,\n/devHistoryBlog/static/c5fb1ce173e6af2c3783796df774e4a8/29114/10-001-10.png 1920w,\n/devHistoryBlog/static/c5fb1ce173e6af2c3783796df774e4a8/1439b/10-001-10.png 2562w\"\n        sizes=\"(max-width: 960px) 100vw, 960px\"\n      />\n    </span>\n  </span>\n  \n  </a>\n    \n\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/devHistoryBlog/static/3a1b12b6c63a94a3d333c573ccb6d9d2/09262/10-001-14.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n  \n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block;  max-width: 960px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 34.166666666666664%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAHCAYAAAAIy204AAAACXBIWXMAABYlAAAWJQFJUiTwAAABdklEQVQoz22R30/aUBTH/f/jw15MXKYPi9tMnEZNlGxhTFARq1g6ITC0pShl1goUaR2lP+7H2xIfjJ57bs6559zzzffe74IQgtTiOCYMY0iky+D7AednKlXTpnLjYDyGCFkPQ5H1RZLmEXGSZPMvOAvzRF6S9Ul4hz7QsHyDwbSDoh+h9Os0hz0qVpWO22I0u8EYNrC8NtPoURIRbwHTlXrXVcnVPnBubtAeFMipi2jWNl7Y5bD1iWJzhc74mJ+XSxRay4ym/YxpOvyaYQYKA/OYdv0L18pn3NMNHvQS/l2D+L+L2fxO8/IrveIqo0aesVEhGNvMCYq3T06D3a9x0d5FVdbRC+tY+hmO+YeJ3aOubVHTNnGqO/TNEn+7eZ48m+R9wLkoLzbxI9TfOe6VfW7zO1x9W2NYPuKhfEhkO7ieya1TJUgC+ffiPVHmgMEskHuanY2rIj/KH7lW9/BODtC1Eqr6i/E/k5nnEvoesyiWKsevAJ8BXqoIiINvCc0AAAAASUVORK5CYII='); background-size: cover; display: block;\"\n    >\n      <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"10 001 14\"\n        title=\"\"\n        src=\"/devHistoryBlog/static/3a1b12b6c63a94a3d333c573ccb6d9d2/d9199/10-001-14.png\"\n        srcset=\"/devHistoryBlog/static/3a1b12b6c63a94a3d333c573ccb6d9d2/8ff5a/10-001-14.png 240w,\n/devHistoryBlog/static/3a1b12b6c63a94a3d333c573ccb6d9d2/e85cb/10-001-14.png 480w,\n/devHistoryBlog/static/3a1b12b6c63a94a3d333c573ccb6d9d2/d9199/10-001-14.png 960w,\n/devHistoryBlog/static/3a1b12b6c63a94a3d333c573ccb6d9d2/07a9c/10-001-14.png 1440w,\n/devHistoryBlog/static/3a1b12b6c63a94a3d333c573ccb6d9d2/09262/10-001-14.png 1896w\"\n        sizes=\"(max-width: 960px) 100vw, 960px\"\n      />\n    </span>\n  </span>\n  \n  </a>\n    </p>\n<ul>\n<li>v1 파드가 그대로 유지되면서 v2의 파드를 하나 생성</li>\n<li>v2의 파드가 제대로 생성이 되었으면 v1의 파드를 하나 삭제</li>\n<li>그 후 다시 v1 파드 삭제, v2 파드 생성 행위를 replica 개수 만큼 반복</li>\n<li>하나 추가 생성된 파드만큼의 자원 사용량이 늘어남</li>\n<li>다운타임이 발생하지 않음</li>\n<li>상세플로우<br>\n1.Deployment의 template 변경<br>\n2.새 ReplicaSet 생성 (새로운 template 적용)<br>\n3.새 ReplicaSet의 replicas를 1로 하여 v2 파드 생성<br>\n4.v2 파드가 서비스와 연결됨<br>\n5.기존 ReplicaSet의 replicas 개수를 하나 줄여 v1 파드 하나 삭제\n6.새 ReplicaSet의 replicas 개수를 하나 늘려 v2 파드 생성 후 서비스와 연결\n7.v1 파드의 개수가 0이 될때까지 5-6반복</li>\n<li>\n<p>어떻게 새로 생성된 파드들은 새로 생성된 ReplicaSet을 구별하나?</p>\n<ul>\n<li>Deployment는 여러 ReplicaSet을 만들고, 각각의 ReplicaSet은 자신의 파드를 구별하기 위해 추가적인 라벨과 셀렉터를 붙인다.</li>\n</ul>\n</li>\n</ul>\n<p>RollingUpdate Deployment 리소스파일</p>\n<div class=\"gatsby-highlight\" data-language=\"yaml\"><pre class=\"language-yaml\"><code class=\"language-yaml\"><span class=\"token key atrule\">apiVersion</span><span class=\"token punctuation\">:</span> apps/v1\n<span class=\"token key atrule\">kind</span><span class=\"token punctuation\">:</span> Deployment\n<span class=\"token key atrule\">metadata</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> deployment<span class=\"token punctuation\">-</span><span class=\"token number\">2</span>\n<span class=\"token key atrule\">spec</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">selector</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">matchLabels</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">type</span><span class=\"token punctuation\">:</span> app2\n  <span class=\"token key atrule\">replicas</span><span class=\"token punctuation\">:</span> <span class=\"token number\">2</span>\n  <span class=\"token key atrule\">strategy</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">type</span><span class=\"token punctuation\">:</span> RollingUpdate <span class=\"token comment\">#type 설정</span>\n  <span class=\"token key atrule\">minReadySeconds</span><span class=\"token punctuation\">:</span> <span class=\"token number\">10</span>\n  <span class=\"token key atrule\">template</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">metadata</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">labels</span><span class=\"token punctuation\">:</span>\n        <span class=\"token key atrule\">type</span><span class=\"token punctuation\">:</span> app2\n    <span class=\"token key atrule\">spec</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">containers</span><span class=\"token punctuation\">:</span>\n      <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> container\n        <span class=\"token key atrule\">image</span><span class=\"token punctuation\">:</span> kubetm/app<span class=\"token punctuation\">:</span>v1\n      <span class=\"token key atrule\">terminationGracePeriodSeconds</span><span class=\"token punctuation\">:</span> <span class=\"token number\">0</span></code></pre></div>\n<br/>\n<p><span class=\"title__sub2\"> 3.3. Blue/Green </span>\n\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/devHistoryBlog/static/b7e7b8c10bc85464092f860eab6e9eec/3c2d4/10-001-11.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n  \n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block;  max-width: 960px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 47.91666666666667%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAABYlAAAWJQFJUiTwAAACU0lEQVQozx2SSXPaQBCF9f9vuaV8SG65pOI4ju0QHG/EoTAGg9hsI8SOQEJCO9oQXwamamqmel736/d6JHMxJgwc4iQiy/asVir6tE/g24SeSWzpmMaExaSH51gCa7E1NWxzwWzYxF3rhFubYL0gckwko31PHLiiWEa22+MvB+jNIqFtEBpz1u0y7uwVo32DtxwSuSa6XMIWBHr9D2a/QRr5GK1/WGob6bleJInDY8FcFNSNKeWnC3xvg+cuabbPRNcKT7Uiy9WQOPJ4kb8y19q0noqo7zX2+xy5+4PBsIz05eaWOI1J0xTyPcpixsnlBbbvY4UzCvJHRsaAT79E8lIjSF3OGx9QjAZnhd/UOjI5UOic0BhdIz00XoTUVHSXss9zJiuNQqXMNo5xtxpV5QzNnFKoVhm+9XC8NRXlGzPrnVKlQleuE3gOz6OfDLQakqy63NVmvE4igm1CliYo85Cb5xnNgc/GF2RZjO7sqLQN/rb6LG1fxBIsP6P+5lBq9hkbm6NK6VFecFke05skeEEsZGe0BganDwryMMJ0YtF9gulmNNWAq9oVivZ+tMcV+O44ofhyT0OtsstypFpvcpRLnorBpERCalddE0WRcCYTrIkApryPDF6VKYHjicEkwp6M4dym/TbBsx32GcfBSoWKgh9G7HY7kZwRi4Kff35HnU45rDhJYA+nt0UeGrVj7EB6WNfVMuelO3HL6Qwe8QMP6fBw0J6IxMOO44j5qoHnW8LPnYiJH5DsWOhdjI0qsPkxlolTt/poxuuRoDMo4fsu/wHsbuCmWrduvgAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n    >\n      <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"10 001 11\"\n        title=\"\"\n        src=\"/devHistoryBlog/static/b7e7b8c10bc85464092f860eab6e9eec/d9199/10-001-11.png\"\n        srcset=\"/devHistoryBlog/static/b7e7b8c10bc85464092f860eab6e9eec/8ff5a/10-001-11.png 240w,\n/devHistoryBlog/static/b7e7b8c10bc85464092f860eab6e9eec/e85cb/10-001-11.png 480w,\n/devHistoryBlog/static/b7e7b8c10bc85464092f860eab6e9eec/d9199/10-001-11.png 960w,\n/devHistoryBlog/static/b7e7b8c10bc85464092f860eab6e9eec/07a9c/10-001-11.png 1440w,\n/devHistoryBlog/static/b7e7b8c10bc85464092f860eab6e9eec/29114/10-001-11.png 1920w,\n/devHistoryBlog/static/b7e7b8c10bc85464092f860eab6e9eec/3c2d4/10-001-11.png 2092w\"\n        sizes=\"(max-width: 960px) 100vw, 960px\"\n      />\n    </span>\n  </span>\n  \n  </a>\n    </p>\n<ul>\n<li>다양한 방법으로 Blue/Green 배포를 할 수 있음(deployment 자체로 제공하진 않음)</li>\n<li>v1 파드를 그대로 유지하면서 v2의 파드를 replica 개수만큼 생성  </li>\n<li>서비스의 label을 v2로 변경</li>\n<li>문제 발생시 다시 서비스의 label을 v1으로 변경 (문제발생시 서비스의 라벨만 변경하면 되니 롤백이 쉬움)</li>\n<li>문제가 없을 경우 기존 v1 파드 삭제</li>\n<li>순간적으로 변경이 되기 때문에 다운타임이 발생하지 않음</li>\n<li>자원 사용량은 기존의 2배가 필요</li>\n<li>상세플로우<br>\n1.새로운 template 및 라벨이 적용된 새 ReplicaSet 생성\n2.새 ReplicaSet에 의해 v2 파드가 생성됨<br>\n3.서비스에 적용된 라벨을 새로운 파드의 라벨로 변경<br>\n4.문제가 없을 경우 기존 v1 파드 및 ReplicaSet 삭제</li>\n<li>\n<p>어떻게 새로 생성된 파드들은 새로 생성된 ReplicaSet을 구별하나?</p>\n<ul>\n<li>Deployment는 여러 ReplicaSet을 만들고, 각각의 ReplicaSet은 자신의 파드를 구별하기 위해 추가적인 라벨과 셀렉터를 붙인다.</li>\n</ul>\n</li>\n</ul>\n<p>Blue/Green ReplicaSet 리소스파일</p>\n<div class=\"gatsby-highlight\" data-language=\"yaml\"><pre class=\"language-yaml\"><code class=\"language-yaml\"><span class=\"token key atrule\">apiVersion</span><span class=\"token punctuation\">:</span> apps/v1\n<span class=\"token key atrule\">kind</span><span class=\"token punctuation\">:</span> ReplicaSet\n<span class=\"token key atrule\">metadata</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> replica1  <span class=\"token comment\"># -> replica2로 변경하여 배포 (새로운 ReplicaSet 생성됨)</span>\n<span class=\"token key atrule\">spec</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">replicas</span><span class=\"token punctuation\">:</span> <span class=\"token number\">2</span>\n  <span class=\"token key atrule\">selector</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">matchLabels</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">ver</span><span class=\"token punctuation\">:</span> v1 <span class=\"token comment\"># -> v2로 변경하여 배포</span>\n  <span class=\"token key atrule\">template</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">metadata</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> pod1\n      <span class=\"token key atrule\">labels</span><span class=\"token punctuation\">:</span>\n        <span class=\"token key atrule\">ver</span><span class=\"token punctuation\">:</span> v1  <span class=\"token comment\"># -> v2로 변경하여 배포</span>\n    <span class=\"token key atrule\">spec</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">containers</span><span class=\"token punctuation\">:</span>\n      <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> container\n        <span class=\"token key atrule\">image</span><span class=\"token punctuation\">:</span> kubetm/app<span class=\"token punctuation\">:</span>v1  <span class=\"token comment\"># -> 업데이트할 이미지로 변경하여 배포</span>\n      <span class=\"token key atrule\">terminationGracePeriodSeconds</span><span class=\"token punctuation\">:</span> <span class=\"token number\">0</span></code></pre></div>\n<p>Blue/Green Service 리소스파일</p>\n<div class=\"gatsby-highlight\" data-language=\"yaml\"><pre class=\"language-yaml\"><code class=\"language-yaml\"><span class=\"token key atrule\">apiVersion</span><span class=\"token punctuation\">:</span> v1\n<span class=\"token key atrule\">kind</span><span class=\"token punctuation\">:</span> Service\n<span class=\"token key atrule\">metadata</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> svc<span class=\"token punctuation\">-</span><span class=\"token number\">3</span>\n<span class=\"token key atrule\">spec</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">selector</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">ver</span><span class=\"token punctuation\">:</span> v1 <span class=\"token comment\"># -> v2로 변경하여 배포 (새로운 파드로 연결)</span>\n  <span class=\"token key atrule\">ports</span><span class=\"token punctuation\">:</span>\n  <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">port</span><span class=\"token punctuation\">:</span> <span class=\"token number\">8080</span>\n    <span class=\"token key atrule\">protocol</span><span class=\"token punctuation\">:</span> TCP\n    <span class=\"token key atrule\">targetPort</span><span class=\"token punctuation\">:</span> <span class=\"token number\">8080</span></code></pre></div>\n<br/>\n<p><span class=\"title__sub2\"> 3.4 Canary </span>\n\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/devHistoryBlog/static/f3f8599f6079eefdbf0f8c4d9540a93b/a7115/10-001-12.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n  \n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block;  max-width: 960px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 42.91666666666667%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAABYlAAAWJQFJUiTwAAACDUlEQVQozy2SW1PaUBSF8/9/QV867UvbBzu9jLYqaNWC1ooKKIhgNQhBI0kgycnl5MbXk2Bmzkz2PmetvfZeWzO9gCCW5FmKH8U8OB5OECGlrE6W55SfHcZM3QBXvUmShCxNVSww/ajCpyouj2YPmqTlAwWUocC63sN7uiNyTMz2HlIsKsJ4qeJOjXA5x58MsG5OWN63eT6vk8gIq9dgMe6hNa7+sipyxZ4Ry5ifp/s8mhPcwOH7yQZB5K0VejbfGrvEsWAw6fH7usb18IrD3/Xq/qhbo6930LZbZ+RFplIrklTy8eAXQ2OKSBa0xvvIJKoA5tLhfb1OGEfo1g395z+c9ftsHR1W93v9r3THp2i7F21EnHDce+TZ9vhwcMhoZmDMAzp3tppXVgGeFjbvdvfxhMsqrVIcd7tsHjWq/53ODzp6Cy2MJCKUnA3GmI6PL8Kq/emLUng7VgrXhK6IefPlktZowbaa27+Zzq3u8PbzOb3pCxvNTwpvoa2KFVm2Llk6pzqnUAaVcy2D/NXlLC+Yqw6GlydMdNVVJNQ8M4zhiPurJrY9rYRpIliqlcnV/NJqTazFE34YqiLK9dL9bK0wSRNc18S4vSB05hQFRFJgTIa0mzUs81EVzdAeZl2lhmq3pLL/uLup2pmpXLHew1dCz59zcLmJFUhFVigRoBttdlp1Ri9LLvpbiMDnPzzjm/9O//kvAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n    >\n      <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"10 001 12\"\n        title=\"\"\n        src=\"/devHistoryBlog/static/f3f8599f6079eefdbf0f8c4d9540a93b/d9199/10-001-12.png\"\n        srcset=\"/devHistoryBlog/static/f3f8599f6079eefdbf0f8c4d9540a93b/8ff5a/10-001-12.png 240w,\n/devHistoryBlog/static/f3f8599f6079eefdbf0f8c4d9540a93b/e85cb/10-001-12.png 480w,\n/devHistoryBlog/static/f3f8599f6079eefdbf0f8c4d9540a93b/d9199/10-001-12.png 960w,\n/devHistoryBlog/static/f3f8599f6079eefdbf0f8c4d9540a93b/07a9c/10-001-12.png 1440w,\n/devHistoryBlog/static/f3f8599f6079eefdbf0f8c4d9540a93b/29114/10-001-12.png 1920w,\n/devHistoryBlog/static/f3f8599f6079eefdbf0f8c4d9540a93b/a7115/10-001-12.png 2186w\"\n        sizes=\"(max-width: 960px) 100vw, 960px\"\n      />\n    </span>\n  </span>\n  \n  </a>\n    </p>\n<ul>\n<li>\n<p>불특정 다수 테스트</p>\n<ul>\n<li>v1 파드를 그대로 유지하면서 v2 파드를 생성하는데, v2 파드도 기존 서비스와 연결되도록 라벨링</li>\n<li>그럼 서비스로 들어오는 일부의 트레픽은 v2 파드로 보내어 테스트 진행</li>\n<li>문제 발생시 v2 파드의 컨트롤러의 replica를 0으로 변경</li>\n<li>문제가 없을 경우 v2파드의 개수를 늘리고, v1파드의 개수를 줄여가며 배포 진행 (불특정 다수 테스트)  </li>\n</ul>\n</li>\n<li>\n<p>특정 타겟 테스트</p>\n<ul>\n<li>각 버전별로 서비스를 생성후 Ingress Controller를 이용하여 유입되는 트레픽을 url로 나누어 테스트</li>\n<li>문제가 없을 경우 v2 파드의 개수를 늘리고 url 원복하여 배포</li>\n<li>자원 사용량은 종료시키는 v1과 새로 생성하는 v2 파드 개수에 따라 늘어남</li>\n</ul>\n</li>\n</ul>\n<br/>\n<p><span class=\"title__sub1\"> 4. DaemonSet  </span>\n\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/devHistoryBlog/static/b9e28b4a721401f69083c00e7f248dd6/1fa90/10-001-15.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n  \n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block;  max-width: 960px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 44.166666666666664%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAABYlAAAWJQFJUiTwAAAB+klEQVQoz2WSQXOaUBSF/f/brrrppH+gq07qNG2TWKsYjBKMWDGCIKggiEEBAfXrk2k3zZ25m/fmnXPfd26tSLYUsUcaOMShx36fkuc5ZVFQlgV5eeIYWmjqR9TOFebwmrXRwBxPcF2fS53PZ/5V7SgeFXlGuHawrBdWqxVpmlIIwUtfBHPPQJLf0X94z1T7jD3+ymxqsvSjt4KBoRCYGrIu0VTqdB+/EUVhdXk8ndhEG/RJn5mhMdH7mMaQl4kuppsLw/yt4N7ViF2d3lDm5u4TzU6dtTXEF+KZb+Islny5r/NLlvjRvuOu3aDZkOhIXYFnX4mchOD5b9eO1STQ01rcS9cMBh1Cb04SLsiTmN1ujzNfsFmtcWcuC9vGc+Z4y6VAdeD/qpUVwwOj0TNtqUFPueV1u6kuy7KkuLi9OowGV6jyB6xRndBsYOsTwXxBvE+Itq+CeyLCLKilh4JdljOdTbCFs2W/sN0lVRgXsyTN8MTZaHTDeHiDPe1i6DKOaQi+W0LRquUi6QaxCLMWBz6OdFt9W5sHBHFOsJwJ6GY1pevYNLvfUJQestLiQZF47Kqo6jNZluEubX4+fKfVbTDQZMFQrMwhcDmLRINNRJKkxJHPNgoqQV+sUbvZEmyfkaUOj70+T32VwdOwWq9kFzMe/WY6mRL6Hn8Az4uXfJjCwVUAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n    >\n      <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"10 001 15\"\n        title=\"\"\n        src=\"/devHistoryBlog/static/b9e28b4a721401f69083c00e7f248dd6/d9199/10-001-15.png\"\n        srcset=\"/devHistoryBlog/static/b9e28b4a721401f69083c00e7f248dd6/8ff5a/10-001-15.png 240w,\n/devHistoryBlog/static/b9e28b4a721401f69083c00e7f248dd6/e85cb/10-001-15.png 480w,\n/devHistoryBlog/static/b9e28b4a721401f69083c00e7f248dd6/d9199/10-001-15.png 960w,\n/devHistoryBlog/static/b9e28b4a721401f69083c00e7f248dd6/07a9c/10-001-15.png 1440w,\n/devHistoryBlog/static/b9e28b4a721401f69083c00e7f248dd6/29114/10-001-15.png 1920w,\n/devHistoryBlog/static/b9e28b4a721401f69083c00e7f248dd6/1fa90/10-001-15.png 2118w\"\n        sizes=\"(max-width: 960px) 100vw, 960px\"\n      />\n    </span>\n  </span>\n  \n  </a>\n    </p>\n<ul>\n<li>ReplicaSet과 다르게 노드의 자원상태와 상관없이 모든 노드에 파드가 한개씩 생긴다.</li>\n<li>한 노드에 1개 이상의 DamonSet 파드를 띄울 수는 없지만, nodeSelector를 이용하여 제외할 노드를 선택할 수 있다.</li>\n<li>\n<p>hostPort를 사용하면 (service의 노드포트 설정) + (externalTrafficPolicy: Local) 옵션을 준 것과 동일하다.</p>\n<ul>\n<li>externalTrafficPolicy: Local 옵션은 요청한 NodeIP에 있는 Pod로 트래픽을 전달한다.</li>\n</ul>\n</li>\n<li>모니터링, 로그수집 등 모든 노드에 들어가야하는 서비스들을 구성할때 사용.</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"yaml\"><pre class=\"language-yaml\"><code class=\"language-yaml\"><span class=\"token key atrule\">apiVersion</span><span class=\"token punctuation\">:</span> apps/v1\n<span class=\"token key atrule\">kind</span><span class=\"token punctuation\">:</span> DaemonSet\n<span class=\"token key atrule\">metadata</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> daemonset<span class=\"token punctuation\">-</span><span class=\"token number\">2</span>\n<span class=\"token key atrule\">spec</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">selector</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">matchLabels</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">type</span><span class=\"token punctuation\">:</span> app\n  <span class=\"token key atrule\">template</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">metadata</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">labels</span><span class=\"token punctuation\">:</span>\n        <span class=\"token key atrule\">type</span><span class=\"token punctuation\">:</span> app\n    <span class=\"token key atrule\">spec</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">nodeSelector</span><span class=\"token punctuation\">:</span> <span class=\"token comment\">#node를 선택할 수 있다.</span>\n        <span class=\"token key atrule\">os</span><span class=\"token punctuation\">:</span> centos\n      <span class=\"token key atrule\">containers</span><span class=\"token punctuation\">:</span>\n      <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> container\n        <span class=\"token key atrule\">image</span><span class=\"token punctuation\">:</span> kubetm/app\n        <span class=\"token key atrule\">ports</span><span class=\"token punctuation\">:</span>\n        <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">containerPort</span><span class=\"token punctuation\">:</span> <span class=\"token number\">8080</span>\n          <span class=\"token key atrule\">hostPort</span><span class=\"token punctuation\">:</span> <span class=\"token number\">18080</span> <span class=\"token comment\">#hostPort 옵션 적₩</span></code></pre></div>\n<br/>\n<p><span class=\"title__sub1\"> 5. Job </span>\n\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/devHistoryBlog/static/0116a39c7865f0fdbf53e54fd1227d05/76435/10-001-16.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n  \n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block;  max-width: 960px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 41.25%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAABYlAAAWJQFJUiTwAAABdElEQVQoz3WRbWviQBSF/f//o7AflrIgCoWyJC1dNY3GxGisMS/NmNiNRqg1mkbN00TWhe7WC8O5nA/PnJlTK4qCaiotiiPF8XjS0jn5+/ULWTwhX/lcmjOjmtp5r8x9yalQlW63O9K3Lel6zW6zId28kabpP2dDnuefoLW/CfcZO19laUocoiGeeMKa/MTtq8SeiwgE4WxOFIalhsxESPAsWCWrr4HHfMerJTFX62ydDk5gYozrBNMhWZYjZj6O0BlPJ7i+T/jbI4imJMnyf+BpPWQItYl9953F8B7bM+iPG1hWl3ARM7BbaG6d7uAR40llFN0yEDcskuhSwozU7RAbt7xXSRwD3WwwMR95Lf9vZKtoToO29qv0dRzPYmybLMrLvgbu30n9XplOJo9G9PQWknKNMezyskxo9yQetAYPLZlW+55+v4eqKsznFxKeWz78aV3TDX5cfcOVpVPzA8NEVbrI8h3NZhNFUeh0yhfFnxN+AD4YVXYJ7tYCAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n    >\n      <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"10 001 16\"\n        title=\"\"\n        src=\"/devHistoryBlog/static/0116a39c7865f0fdbf53e54fd1227d05/d9199/10-001-16.png\"\n        srcset=\"/devHistoryBlog/static/0116a39c7865f0fdbf53e54fd1227d05/8ff5a/10-001-16.png 240w,\n/devHistoryBlog/static/0116a39c7865f0fdbf53e54fd1227d05/e85cb/10-001-16.png 480w,\n/devHistoryBlog/static/0116a39c7865f0fdbf53e54fd1227d05/d9199/10-001-16.png 960w,\n/devHistoryBlog/static/0116a39c7865f0fdbf53e54fd1227d05/07a9c/10-001-16.png 1440w,\n/devHistoryBlog/static/0116a39c7865f0fdbf53e54fd1227d05/76435/10-001-16.png 1742w\"\n        sizes=\"(max-width: 960px) 100vw, 960px\"\n      />\n    </span>\n  </span>\n  \n  </a>\n    </p>\n<ul>\n<li>어떤 컨트롤러를 사용했냐에 따라 파드의 lifecycle이 달라진다.</li>\n</ul>\n<br/>\n<p><span class=\"title__sub2\"> 5.1. Pod </span></p>\n<ul>\n<li>컨트롤러를 사용하지 않고 파드로만 띄웠을 경우, 노드 또는 파드 장애시에 복구가 되지 않는다.</li>\n</ul>\n<br/>\n<p><span class=\"title__sub2\"> 5.2. ReplicaSet </span></p>\n<ul>\n<li>노드 또는 파드 장애시에 파드를 새로 생성한다. (Recreate)</li>\n<li>파드가 일을 하지 않을 경우에 파드를 재시작해준다. (Restart)</li>\n<li>지속적인 서비스가 요구될때 사용</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">Recreate vs Restart \n- Recreate는 파드를 재생성하여 IP나 파드명이 변경이 된다. \n- Restart는 파드를 재생성하지 않고 안의 컨테이너만 재시작한다.</code></pre></div>\n<br/>\n<p><span class=\"title__sub2\"> 5.3. Job </span></p>\n<ul>\n<li>프로세스가 일을 하지 않을 경우 파드를 종료시킨다. (Finish)</li>\n<li>이때 종료는 파드 삭제가 아닌 자원을 사용하지 않는 상태를 의미한다.</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"yaml\"><pre class=\"language-yaml\"><code class=\"language-yaml\"><span class=\"token key atrule\">apiVersion</span><span class=\"token punctuation\">:</span> batch/v1\n<span class=\"token key atrule\">kind</span><span class=\"token punctuation\">:</span> Job\n<span class=\"token key atrule\">metadata</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> job<span class=\"token punctuation\">-</span><span class=\"token number\">2</span>\n<span class=\"token key atrule\">spec</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">completions</span><span class=\"token punctuation\">:</span> <span class=\"token number\">6</span>\n  <span class=\"token key atrule\">parallelism</span><span class=\"token punctuation\">:</span> <span class=\"token number\">2</span>\n  <span class=\"token key atrule\">activeDeadlineSeconds</span><span class=\"token punctuation\">:</span> <span class=\"token number\">30</span>\n  <span class=\"token key atrule\">template</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">spec</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">restartPolicy</span><span class=\"token punctuation\">:</span> Never\n      <span class=\"token key atrule\">containers</span><span class=\"token punctuation\">:</span>\n      <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> container\n        <span class=\"token key atrule\">image</span><span class=\"token punctuation\">:</span> kubetm/init\n        <span class=\"token key atrule\">command</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span><span class=\"token string\">\"sh\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"-c\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"echo 'job start';sleep 20; echo 'job end'\"</span><span class=\"token punctuation\">]</span>\n      <span class=\"token key atrule\">terminationGracePeriodSeconds</span><span class=\"token punctuation\">:</span> <span class=\"token number\">0</span></code></pre></div>\n<br/>\n<p><span class=\"title__sub1\"> 5. CronJob </span></p>\n<ul>\n<li>주기적인 시간에 따라 Job을 생성하는 컨트롤러</li>\n<li>대체로 Job은 CronJob으로 특정시간에만 작동하도록 사용한다.</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"yaml\"><pre class=\"language-yaml\"><code class=\"language-yaml\"><span class=\"token comment\">#v1.22</span>\n<span class=\"token key atrule\">apiVersion</span><span class=\"token punctuation\">:</span> batch/v1\n<span class=\"token key atrule\">kind</span><span class=\"token punctuation\">:</span> CronJob\n<span class=\"token key atrule\">metadata</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> cron<span class=\"token punctuation\">-</span>job\n<span class=\"token key atrule\">spec</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">schedule</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"*/1 * * * *\"</span>\n  <span class=\"token key atrule\">jobTemplate</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">spec</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">template</span><span class=\"token punctuation\">:</span>\n        <span class=\"token key atrule\">spec</span><span class=\"token punctuation\">:</span>\n          <span class=\"token key atrule\">restartPolicy</span><span class=\"token punctuation\">:</span> Never\n          <span class=\"token key atrule\">containers</span><span class=\"token punctuation\">:</span>\n          <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> container\n            <span class=\"token key atrule\">image</span><span class=\"token punctuation\">:</span> kubetm/init\n            <span class=\"token key atrule\">command</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span><span class=\"token string\">\"sh\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"-c\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"echo 'job start';sleep 20; echo 'job end'\"</span><span class=\"token punctuation\">]</span>\n          <span class=\"token key atrule\">terminationGracePeriodSeconds</span><span class=\"token punctuation\">:</span> <span class=\"token number\">0</span>\n\n<span class=\"token punctuation\">---</span>\n<span class=\"token comment\">#v1.15</span>\n<span class=\"token key atrule\">apiVersion</span><span class=\"token punctuation\">:</span> batch/v1beta1\n<span class=\"token key atrule\">kind</span><span class=\"token punctuation\">:</span> CronJob\n<span class=\"token key atrule\">metadata</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> cron<span class=\"token punctuation\">-</span>job<span class=\"token punctuation\">-</span><span class=\"token number\">2</span>\n<span class=\"token key atrule\">spec</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">schedule</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"20,21,22 * * * *\"</span>\n  <span class=\"token key atrule\">concurrencyPolicy</span><span class=\"token punctuation\">:</span> Replace\n  <span class=\"token key atrule\">jobTemplate</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">spec</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">template</span><span class=\"token punctuation\">:</span>\n        <span class=\"token key atrule\">spec</span><span class=\"token punctuation\">:</span>\n          <span class=\"token key atrule\">restartPolicy</span><span class=\"token punctuation\">:</span> Never\n          <span class=\"token key atrule\">containers</span><span class=\"token punctuation\">:</span>\n            <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> container\n              <span class=\"token key atrule\">image</span><span class=\"token punctuation\">:</span> kubetm/init\n              <span class=\"token key atrule\">command</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span><span class=\"token string\">\"sh\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"-c\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"echo 'job start';sleep 140; echo 'job end'\"</span><span class=\"token punctuation\">]</span>\n          <span class=\"token key atrule\">terminationGracePeriodSeconds</span><span class=\"token punctuation\">:</span> <span class=\"token number\">0</span></code></pre></div>","fields":{"tagSlugs":["/tags/k-8-s/","/tags/controller/"],"slug":"/history/posts/2022-04-10--001"},"frontmatter":{"title":"[K8S] 컨트롤러","tags":["k8s","controller"],"date":"2022-04-10","description":"대세는 쿠버네티스"}}},"pageContext":{"slug":"/history/posts/2022-04-10--001"}},"staticQueryHashes":[]}