K8S는 비 국가 컨트롤러의 원리를 소개

포드 컨트롤러 :

  ReplicationController : 초기 K8S 유일한 컨트롤러, 나중에는이 모든 작업을 완료 너무 복잡하기 때문에 폐기 .. 할 것으로
  ReplicaSet : 사용자가 포드가 매수를 지정 작성하고 보장하기 위해 사용되는 포드의 사본 사용자의 수는 원하는 매수를 충족하고있다.
        복사 "Duotuishaobu"와 다른 메커니즘의 수입니다. [그것은 ReplicationController의 새 버전 것으로 생각된다. ]
   은 세 가지 주요 구성 요소로 구성됩니다 :
     1. 포드의 매수를 원하는 사용자를.
        2. 탭을 선택 : 포드의 자신의 관리를 선택하는 데 사용합니다
        3. 포드 템플릿 : 복사 태그 선택기의 불충분 한 수를 선택하는 경우에 따라 . 포드는 새로운 템플릿을 생성하는
  배포를 : 우리가 상태 포드의 최고의 컨트롤러를 관리하는 데 사용됩니다.
      이 업데이 트를 압연 지원, 롤백, 또한 능력 선언적 구성을 제공합니다, 그것은 우리가 미래의 성명에 따라 논리를 구성 할 수 있습니다 정의,
      정의 된 모든 자원은 언제든지 다시 문을 수 있으며, 한 자원 정의가 동적 업데이트를 허용하는.
  DaemonSet : 포드는 클러스터 노드 컨트롤러에서 실행되도록하는 데 사용됩니다. 그것은 일반적으로 시스템 수준의 응용 프로그램을 구축하는 데 사용됩니다.
      새로 추가 된 클러스터의 경우 : 그것은 매수 만들어 자동으로, 즉 클러스터의 크기를 기반으로 매수 정의하지 않는
      각 노드에서 노드 노드가 DaemonSet가 자동으로 새 노드에서 포드 포드를 만들 템플릿을 사용하며, 정확한 보장 단지
      포드. 따라서이 컨트롤러를 실행, 포드 템플릿 및 태그 선택기가 있어야합니다.
      그것은 또 다른 역할이 있습니다. 포드는 조건을 충족하는 경우에만 지정된 노드에서 실행되고 만 정확한 포드 실행하도록 제어하는 데 사용됩니다
    그것은 포드를 관리 :
      1. 데몬이 백그라운드에서 실행을 계속해야합니다.
      2. 심지어 바쁜하지 않을 경우, 그것은 또한 사용자의 변화를 모니터링하거나 소켓에 대한 요청을 제기 할 수 있습니다, 순간을 종료하지 않는
  작업 : 주로 작업이 완료되면 포드는, 그것을 철회하는 완전한 지정된 작업을 만드는 데 사용 있지만 경우 . 작업은 작업이 완료 될 때까지이 다시 시작됩니다, 완료되지
  는 포드가 시작 주기적 작업의 정의이며, 포드 작업이 다시 시작 작업의 실행이 완료된 후 종료됩니다 유사한 시작 : cronjob를.
      완료되지 않은 자동으로 작업을 처리하는 동시에, 다음 시작 시간은 질문왔다.


컨트롤러 예 :
  ReplicaSet 컨트롤러 예 :
  다음 각 매개 변수의 의미를 이해하려면 #, 당신은 EXPLAIN replicaset kubectl 볼 수 있습니다

  정력 replicaset.yaml
    apiVersion을 : 앱 / V1 번호를 일반적으로, 매니페스트 파일의 기본 형식 :
    종류 : ReplicaSet # apiVersion는, 친절하고, 다음 사양에 필요한 메타 데이터의 필요한 매개 변수 replicaSet입니다.
    메타 데이터 : # 그 매개 변수를 지원하는 사양을 보려면 :. replicaset.spec 캔을 설명 kubectl
      이름 : myapp와의
      네임 스페이스 : 기본
    사양 :
      복제본 :. 여기에 2 #은 ReplicaSet 정의 매수입니다
      : 선택기
       matchLabels :
        응용 프로그램 : MyApp를
        출시 : 카나리아
      템플릿 : #보기 템플릿 지원하는 매개 변수 :. 볼 replicaset.spec.template 설명 kubectl
        : 메타 데이터
         이름 : myapp- 포드 번호는 일반적으로 포드 네임 스페이스와 네임 스페이스 컨트롤러는 생략 할 수 있고, 일관성이 있어야합니다.
         라벨 : 여기에 포드 # 영구적으로 레이블이 부착 된 레이블과 선택을 충족해야합니다 그렇지 않으면 포드가 아래로 작성됩니다 만들 수 있습니다.
          응용 프로그램 : MyApp를
          출시 : 카나리아
        사양 :
         컨테이너 :
         - 이름 : myapp와-컨테이너
          이미지 : 비지 박스
          포트 :
          - 이름 : HTTP
           containerPort : 80

# 시작 :
  -f replicaSet.yaml 만들기 kubectl
  kubectl GET PODS
  kubectl GET RS

  삭제 포드 PodName kubectl
  덜 컨트롤러의 제어하에 포드의 수를 볼 수 있습니다 # 포드를 GET kubectl 자동. 생성됩니다

  포드 컨트롤러에서 # 다음 테스트를, 얼마나 더 많은
    레이블 포드를 kubectl PodName 릴리스 = 카나리아는, 응용 프로그램 = MyApp를 # 포드는 태그를 추가
    포드 --show-라벨 얻을 kubectl
    참고 :
        이 테스트는 보여줍니다 정의 컨트롤러가 포드를 관리하는 경우, 정확하게 정의해야합니다 포드 라벨,
     피하려고, 사용자와 당신이 비극의 결과로, 줄을 정확하게 정의하는 컨트롤러에 의해 생성 된 포드 라벨!
    또한 :
      서비스 및 컨트롤러는 직접 관련이없는,하지만 그들은 모두가 포드를 얻을 수있는 태그 선택기를 사용합니다
      . 그것은 또한 포드 서비스 컨트롤러가 여러 개 만들어 관리 할 수 있습니다

구성 # 컨트롤러는 동적 업데이트를 지원하는 것입니다.
  kubectl 편집 RS 사본의 수를 수정 한 다음 효과를 볼 #을 replicaset.

# 또한 지원 동적 업데이트는 포드 버전을 미러링.
  Kubectl 편집 RS replicaset
  kubectl GET RS -o 와이드
  참고 :
   여기에 포드 버전 미러 있지만, 사실 버전 포드가 실행되고 변경되지 않았습니다 미러링 수정할 수 있습니다.
  수동으로 포드를 삭제하면, 새로운 포드가 만든 새 버전을 사용합니다,이 때.
  이 쉽게 달성 될 수 금 새 즉, 업데이트 출시 :하는 삭제 포드가 포드의 새 버전이 새 버전을 사용할 수 있도록
  흐름의 일부가 될 것입니다, 흐름의이 부분은 테스트 트래픽으로 사용할 수 있습니다, 이틀 후에 경우, 사용자가 버그를 불평을 찾을 수 없습니다, 당신은 할 수
  수동으로 포드는 하나 하나는 포드의 새 버전으로 교체 삭제합니다.

 

전개:

  

    이것은 즉, 제어기 ReplicaSet 컨트롤러 : 배포 관리 컨트롤러 포드는 직접 사용되지는이를 관리하는 데 사용되는
  본도에 도시하는 바와 같이 동적 업데이트 롤백 될 수 있다는의 ReplicaSet 컨트롤러를 이용. , 그것을 달성 할 수있는
  회색 그림은 업데이트 프로세스를 보여줍니다에 업데이트하는 다양한 방법, 그것은 한 번에 제어 포드, 하나를 ReplicaSetV1
  라인에 ReplicaSetV2 후, 문제가있는 경우 제거하고 ReplicaSetV2에 재 구축, 신속하게 반환 할 수 있습니다 V1을 출시했다.
  일반적으로 배포가 직접 사용 롤백 10 버전을 유지합니다, ReplicaSet 삭제되지 않습니다.

 이것은 업데이트 포드 입경 계조 카나리아 업데이트, 업데이트 시안을 업데이트함으로써 달성된다.
 그것은 크기가 같은 수있는 입자를 생성하기 위해 포드를 제어 :
  1. 삭제할 때, 포드 (5)이 보장되어야하지만, 임시 포드보다, 그것은 하나를 만들 것이다 교체 될 때까지 모든 삭제 더 할 수 있습니다.
  2.이 다섯이 보장되어야하지만, 약간의 일시적 포드 될 수 있습니다, 그것은 먼저까지 모두 바꾸기를 만들어 하나를 제거합니다.
  3. 다섯 모두 교체 될 때까지 두 가지를 삭제 한 후 다음이 삭제이 생성되며, 두 개의를 생성하고, 또한 조금이 보장하지만, 한 번 더해야하지만됩니다.
  4.이, 한 번 다섯을 생성 한 후 직접 포드가 삭제 이전에, 새로운 포드로 교체되며, 또한 두 배 이상 임시 허가를 더 있습니다.

배포 제어 매개 변수 :
  전략에 : # 설정 업데이트 정책
  유형 <재 작성 | RollingUpdate> #이 .Recreate 업데이트 정책 유형을 지정합니다 : 그것은 삭제, 재구성이다.
                           RollingUpdate : 이것은 롤링 업데이트입니다.
  rollingUpdate :
    maxSurge : 롤오버를 정의 할 때, 두 값 지원 매수를 증가하도록 허용
          5 다섯 최대 매수를 증가시킨다.
          20 % : 당신은 포드의 10 개 사본이있는 경우, 20 % 증가는 두 개의 사본에 달려있다.
    MaxUnavailable : 사용할 수의 최대 수는 또한 정수 또는 비율을 지원합니다 ..
  RevisionHistoryLimit <지능> # 몇 가지 역사적 ReplicaSet 버전 기본 저장을 설정합니다. (10)가
  일시 정지 <부울> # 여부를 업데이트하기 전에 일시 정지

정력 myapp- deploy.yaml 
apiVersion : 응용 프로그램 / V1의 
종류 : 배포 
메타 데이터 : 
     이름 : myapp와 - 배포
      네임 스페이스 : 기본 
사양 : 
     복제본 : 2 
     선택 : 
         matchLabels : 
             응용 프로그램 : myapp와의 
             릴리스 : 카나리아 
     템플릿 : 
            메타 데이터 : 
                라벨 : 
                     응용 프로그램 : myapp와의 
                     릴리스 : 카나리아 
            사양 : 
                 cantainers :
                   -    이름 : myapp와의 
                       이미지 : 비지 박스
                       포트 :
                        -   이름 : HTTP의 
                           containerPort : 80

 

위의 목록 파일을 작성 후 #, 당신은 수행 할 수
  kubectl 배포-demo.yaml -f 적용을

  배포를 GET kubectl
  RS GET kubectl

  배포-demo.yaml 정력
    번호 # 4의 사본을 수정

  배포 수정 demo.yaml 번호 -f 적용 kubectl을 구성이 여러 번 적용 할 수있는 적용하고, 자동으로 목록의 변경 사항을 반영, 적용 다시 실행 중입니다.

  배포 배포 # myapp와 뷰 Annotaions을 DESCRIBE kubectl, RollingUpdateStrategy.


  # 동적 롤오버 테스트
    정력 배포-demo.yaml
      이미지의 수정 된 버전입니다 새로운 버전의

  단말기 2 :
    PODS 앱 = MyApp를 얻는 kubectl는 -l -w

  단말기 1
    에 -f 적용 배포-demo.yaml을 kubectl

  롤오버 효과를 확인하기 위해 단말 (2) 후.
    RS 넓은 #은 RS, RS 및 기존의 데이터보다 더 볼 수 있습니다 -o 얻을 kubectl은 0입니다

    kubectl에 rollOut 역사 배포 - 배포 myapp와 번호 업데이트 기록보기 스크롤

동적 방법으로 패치 구성 파일을 업데이트 # :
  kubectl 패치 배포 myapp와-배포 -p ' { "사양": { "복제"5}}'
    참고 :.이 동적으로 컨트롤러 배포 - 배포의 MyApp의 매개 변수를 변경할 수 있습니다

  #을 GET kubectl 포드 포드의 수를 볼 수 있습니다 우리는 동적으로 만들었습니다.

# 배포 정책 컨트롤러는 동적으로 롤오버 수정 :
  kubectl 패치 배포 배포 -p-의 MyApp를 '{ "사양": { "전략": { "rollingUpdate": { "maxSurge":. 1, "maxUnavailable": 0}}} }

  배포 배치가 MyApp를보기 업데이트 정책 # 1 DESCRIBE kubectl

새로운 버전 배포 미러 제어 하에서 개질 # 포드 및 카나리아 업데이트 달성
  단말기 1.
    kubectl GET PODS -l MyApp를 응용 = -w

  단자 2 :
    kubectl의 SET 배포 - 배포 MyApp를 MyApp를 이미지 = 비지 박스 : V3
    kubectl 롤아웃 PAUSE 배포 배포 MyApp-

  3 터미널 :



    배포 MyApp를-에 rollOut 다시 시작 kubectl 배포

    kubectl -o 와이드 RS GET


다시 버전 지정에 # 롤을
  kubectl에 rollOut 역사 MyApp를 배포 - 배포
    deployment.extensions이 / MyApp를이 - 배포
    개정에게 보내기 원인 변경 -
      0 <없음>
      이 <없음>을
      . 3 <없음>
      . 4 <없음>
      . 5 <없음>

  kubectl에 rollOut MyApp를 사용하여 실행 취소 배포 - 배포 --to-개정. 3 =

  kubectl에 rollOut 역사 # 배포 배포-MyApp를 첫 번째 버전의 네 번째 버전을 참조합니다.
    deployment.extensions은 / MyApp를가-배포하지 않습니다
    개정 변경 -을 원인
      0 <없음>
      4 <없음>
      5 <없음>
      6 <없음> # 3의 버전으로 돌아 오지여기에 표시된 버전 6입니다
      그들이 버전 2로 복귀하려고 7 <없음> # 다음, 버전 7은 여기에 표시됩니다.

 

daemonSet 컨트롤러 :
  #보기 daemonSet 컨트롤러 구문
    kubectl DS에서 EXPLAIN
    ds.spec을 EXPLAIN kubectl

정력 DS- demo.yaml 
apiVersion : 응용 프로그램 / V1의 
종류 : DaemonSet의 
메타 데이터 
   이름 : filebeat - DS
    네임 스페이스 : 기본 
사양 : 
  선택 : 
     matchLabels : 
       응용 프로그램 : filebeat 
       출시 : 안정적인 
  템플릿 : 
    메타 데이터 : 
       라벨 : 
         응용 프로그램 : filebeat 
         출시 : 안정적인 
    사양 : 
      용기 :
       -   이름 : filebeat 
         이미지 : ikubernetes / filebeat : 5.6 . 5 - 고산
         ENV : #env的用法: pods.spec.containers.env 설명 kubectl
          - 이름 : REDIS_HOST의 
           값 : 레디 스를. 기본 .svc.cluster.local
          - REDIS_LOG_LEVEL의 : 이름 
           값을 : 정보

  # 다음 daemonSet 포드 자원의 목록을 작성하는 컨트롤러의 구성을 적용하려면 적용을 사용합니다.
  Kubectl은 -f DS-demo.yaml 적용

방식으로 함께 # 여러 관련 자원 정의는,이 작동하는 일반적인 방법입니다. 
빔 DS - demo.yaml 
apiVersion : 앱 / V1의 
종류 : 배포 
메타 데이터 : 
  이름 : 레디 스의 
  네임 스페이스 : 기본 
사양 : 
  복제본 : 1 
  선택기 : 
    matchLabels : 
     응용 프로그램 : 레디 스 
     역할 : LOGSTOR 
  틀 : 
    메타 데이터 : 
     레이블 : 
        응용 프로그램 : 레디 스 
        역할 : LOGSTOR의 
     사양 : 
       컨테이너 :
        -   이름 : 레디 스의 
          이미지 : 레디 스 : 4.0 - 알파인 
          포트 :
           -이름 : 레디 스의 
            containerPort : 6379 
---       #这表示分隔符. 
apiVersion : 응용 프로그램 / V1의 
종류 : DaemonSet의 
메타 데이터 
  이름 : filebeat - DS
   네임 스페이스 : 기본 
사양 : 
  선택 : 
    matchLabels : 
       응용 프로그램 : filebeat 
       출시 : 안정적인 
  템플릿 : 
    메타 데이터 : 
      라벨 : 
       응용 프로그램 : filebeat 
       출시 : 안정적인 
    사양 : 
      컨테이너 :
       - 이름 : filebeat 
        이미지 : ikubernetes / filebeat : 5.6 . 5- 알파인 
        ENV :
         -   이름 : REDIS_HOST 
           . 값 : 레디 스 기본 .svc.cluster.local 
           #fiebeat 레디 스 프런트 엔드 서비스 이름은 여기에 지정된 이름에주의, 환경 변수에 의해 프런트 엔드 서비스 레디 스를 찾아 쓸 무료로하지! 
        -   이름 : REDIS_LOG_LEVEL의 
           값 : 정보

  충돌을 방지하기 위해, daemonSet 포드 자원에 의해 생성 # 때문에 후 2는. 포드 자원을 삭제
  Kubectl은 -f DS-demo.yaml 삭제

포드는 두 개의 자원 동시에 fliebeat 다시 만들기 다음 #의 레디 스를합니다.
  Kubectl은 -f DS를-데모 적용 .yaml

다음 서비스로 생성 #의 레디 스는 레디 스 서비스 포트를 노출하기 때문에 filebeat는 레디 스에 전달 서비스, 다음 서비스 로그와에 로그를 보낼 수 있습니다.
  배포 레디 스 --port = 6379 노출 kubectl
  kubectl GET SVC #보기가 만든 서비스

확인 #의 레디 스 로그 filebeat받은 경우.
  예를 들면 착륙을 볼 수 있습니다 실행 상태로 PODS 번호의 레디 스를 GET kubectl.
  Exec에서 - 그것은의 레디 스 - 5b5d .... kubectl - / 빈 / SH
  데이터 -tnl / # netstat를을
  / 데이터 # nslookup을 redis.default.svc.cluster.local #의 레디 스가. 도메인 이름을 확인할
  / 레디 스-CLI 데이터 -h redis.default.svc.cluster.local # 번호가 직접 도메인 이름 레디 스를 통해 로그인 할 수 있는지 확인
  / 데이터 # 키 * 키가 생성되면 #의 레디 스의 성공을 착륙 후, 참조하십시오.

# 상태 filebeat을 보려면 로그인
  간부 - 그것은 filebeat-DS kubectl-h776m - / 빈 / SH
  / PS UAX 번호
  . / # # 1 CAT 구성 파일 레디 스 그것의 뷰를 정의 /etc/filebeat/filebeat.yml
  . / # 번호는하려면 printenv 환경 변수를 참조
  / # 죽일 -1 1 # -1 그의 filebeat는 포드를 다시 시작으로 이어질 수있는 구성 파일,하지만 괜찮아. 다시 읽 신호하는 데 사용됩니다

뿐만 아니라 #을, 당신이 daemonSet -o 넓은 정의는 포드가 포드에 하나 개의 노드에서 실행해야 볼 수 있습니다.
  PODS을 GET kubectl 포드는 기본 노드에서 실행되지 않습니다 정의 -l 응용 프로그램 = filebeat -o 넓은 #daemonSet은
                      . #은 주로 이전 배포하기 때문에, 마스터 노드가 예약되지 않은 정의
다음과 같은 문제를 #을 때 시험 발견 :
  노드 GET 번호의 kubectl
    이름을 AGE 버전 STATUS의 역할
    192.168.111.80 준비 노드 2d21h의 v1.13.5
    192.168.111.81 준비 노드 2d21h의 v1.13.5
    192.168.111.84 준비, SchedulingDisabled 마스터 2d21h v1.13.5를 전달하지 않도록 구성 # 차 노드, 즉 얼룩.
    192.168.111.85 NotReady, SchedulingDisabled 마스터 2d21h v1.13.5의

  #의 kubectl는 GET POD 앱 = filebeat -l -o 와이드
    AGE의 NAME가 다시 시작 상태 READY 선정 노드 준비 게이츠는 IP 노드
    8gfdr 1/1 실행-DS-0 192.168 10.10.171.2 13m를 filebeat. 111.81 <없음> <없음>
    filebeat-DS-13m. 10.10.240.193 192.168.111.84 <없음>가 <없음> 1 실행 ml2bk 1/1 심지어 마스터 노드 # 작업!
    filebeat-DS-0 러닝 zfx57 1/1 10.10.97.58 192.168.111.80 13m <없음> <없음>
    #은 특성 DaemonSet에 맞춰보기의 실행 상태 점에서, 각 노드가 실행됩니다.하지만 알 수없는 이유로, 마스터에서 실행할 수있는 이유는 무엇입니까?



#daemonSet도 지원 압연 ? 업데이트하는 방법 업데이트
  노드 만 포드를 실행할 수 있기 때문에, 하나를 만들 수있는 첫 번째 컷을 지원 ds.spec.updatestrategy.rollingUpdate 번호를 EXPLAIN kubectl.

# 관리하에 daemonSet 컨트롤러 filebeat-DS 롤오버 포드를 정의 filebeat로 이미지 업그레이드 : 5.6.6-고산
  이미지의 DS =의 ikubernetes / filebeat filebeat는 SET-kubectl filebeat daemonsets : 5.6.6-알파인

# 업데이트 프로세스 포드를 볼 수의
  kubectl 포드 -w 얻을

의 업데이트 전략 DaemonSet :
  updateStrategy을 :
  유형의 <RollingUpdate | OnDelete> #OnDelete : 삭제할 때 만들어집니다.

동적 업데이트 # DaemonSet는 :
  DS GET kubectl
  5.6.6-알파인 : kubectl 이미지 daemonSets는 SET-DS filebeat = ikubernetes filebeat / filebeat

  터미널 2 :
    GET -w kubectl 포드

  : # 네임 스페이스는 호스트와 포드 공유 할 수 있습니다
  포드 :
    hostNetwork을 <부울 > #, 포드는 호스트 시스템을 공유 네트워크 네임 스페이스를 만들 포드, 컨테이너에 액세스 할 수있는 호스트 (80)에 직접 액세스를 시작합니다.
    hostPID는 <부울> #이 실제로 호스트와의 도커 네트워크 모델 모델 공유 네트워크 네임 스페이스입니다.
    hostIPC <불>

 

추천

출처www.cnblogs.com/wn1m/p/11287837.html