成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

kubenetes(k8s)學(xué)習(xí)筆記

kubernetes(K8S)? ? ? ?google? ? ?

創(chuàng)新互聯(lián)主要從事成都做網(wǎng)站、網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)貴港,10余年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):028-86922220

特點:

1、輕量級:消耗資源小

2、開源

3、彈性伸縮

4、負(fù)載均衡

高可用集群副本數(shù)據(jù)最好是 >= 3 奇數(shù)個

組件說明:

主要組件:

APISERVER:所有服務(wù)訪問的統(tǒng)一入口

CrontrollerManager:維持副本期望數(shù)目

Scheduler::負(fù)責(zé)介紹任務(wù),選擇合適的節(jié)點進(jìn)行分配任務(wù)

ETCD:鍵值對數(shù)據(jù)庫? 儲存K8S集群所有重要信息(持久化)

Kubelet:直接跟容器引擎交互實現(xiàn)容器的生命周期管理

Kube-proxy:負(fù)責(zé)寫入規(guī)則至 IPTABLES、IPVS 實現(xiàn)服務(wù)映射訪問的

其他插件說明:

COREDNS:可以為集群中的SVC創(chuàng)建一個域名IP的對應(yīng)關(guān)系解析

DASHBOARD:給 K8S 集群提供一個 B/S 結(jié)構(gòu)訪問體系

INGRESS CONTROLLER:官方只能實現(xiàn)四層代理,INGRESS 可以實現(xiàn)七層代理

FEDERATION:提供一個可以跨集群中心多K8S統(tǒng)一管理功能

PROMETHEUS:提供K8S集群的監(jiān)控能力

ELK:提供 K8S 集群日志統(tǒng)一分析接入平臺

k8s安裝部署:

各節(jié)點系統(tǒng)初始化:此處環(huán)境為

k8s-master01? ? 172.20.120.187

k8s-node01? ? ? ?172.20.120.184

k8s-node02? ? ? ?172.20.120.183

harbor? ? ? ? ? ? ? ?172.20.120.182

1、設(shè)置主機(jī)名、主機(jī)名ip解析

# hostnamectl set-hostname k8s-node01

# vi /etc/hosts

172.20.120.187? k8s-master01

172.20.120.184? k8s-node01

172.20.120.183? k8s-node02

172.20.120.182? hub.nice.com

2、安裝依賴包

# yum install epel-release -y

#?yum install conntrack ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git -y

3、設(shè)置防火墻為iptables,并清空規(guī)則

#?systemctl stop firewalld && systemctl disable firewalld

#?yum -y install iptables-services && systemctl start iptables && systemctl enable iptables && iptables -F && service iptables save

4、關(guān)閉虛擬內(nèi)存和selinux

#?swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

#?setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

5、調(diào)整內(nèi)核參數(shù)

#?vim /etc/sysctl.d/kubernetes.conf

必須的參數(shù):

net.bridge.bridge-nf-call-iptables=1

net.bridge.bridge-nf-call-ip6tables=1

net.ipv6.conf.all.disable_ipv6=1

可選的優(yōu)化參數(shù):

net.ipv4.ip_forward=1

net.ipv4.tcp_tw_recycle=0

vm.swappiness=0? ? ? ? ?#禁止使用swap空間,只有當(dāng)系統(tǒng)oom時才允許使用它

vm.overcommit_memory=1? ? ? ? ? #不檢查物理內(nèi)存是否夠用

vm.panic_on_oom=0? ? ? ? ? ? ? ?#開啟oom

fs.inotify.max_user_instances=8192

fs.inotify.max_user_watches=1048576

fs.file-max=52706963

fs.nr_open=52706963

net.netfilter.nf_conntrack_max=2310720

6、調(diào)整系統(tǒng)時區(qū)

#?timedatectl set-timezone Asia/Shanghai

#?timedatectl set-local-rtc 0

#?systemctl restart rsyslog crond

7、關(guān)閉系統(tǒng)不需要的服務(wù)

#?systemctl stop postfix && systemctl disable postfix

8、設(shè)置rsyslogd和systemd journald

#?mkdir /var/log/journal? ? ? ? ? ? ? ?#持續(xù)化保存日志的目錄

#?mkdir /etc/systemd/journald.conf.d

#?cat > /etc/systemd/journald.conf.d/99-prophet.conf <<EOF

[Journal]

#持續(xù)化保存到磁盤

Storage=persistent

#壓縮歷史日志

Compress=yes

SyncIntervalSec=5m

RateLimitInterval=30s

RateLimitBurst=1000

#最大占用空間 10G

SystemMaxUse=10G

#單日志文件最大 200M

SystemMaxFileSize=200M

#日志保存時間 2周

MaxRetentionSec=2week

#不將日志轉(zhuǎn)發(fā)到 syslog

ForwardToSyslog=no

EOF

# systemctl restart systemd-journald

9、升級系統(tǒng)內(nèi)核為4.4

centos7x 系統(tǒng)自帶的3.10.x內(nèi)核存在一些bugs,導(dǎo)致運行的docker、kubernetes不穩(wěn)定

#?rpm -Uvh https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm

#?yum --enablerepo=elrepo-kernel install -y kernel-lt

#?grub2-set-default "CentOS Linux (4.4.202-1.el7.elrepo.x86_64) 7 (Core)"

#?reboot

10、kube-proxy開啟ipvs的前置條件

#?modprobe br_netfilter

#?cat > /etc/sysconfig/modules/ipvs.modules << EOF

#!/bin/bash

modprobe -- ip_vs

modprobe -- ip_vs_rr

modprobe -- ip_vs_wrr

modprobe -- ip_vs_sh

modprobe -- nf_conntrack_ipv4

EOF

chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4

11、安裝docker軟件

#?yum install -y yum-utils device-mapper-persistent-data lvm2

#?yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

#?yum update -y && yum install -y docker-ce

#?grub2-set-default "CentOS Linux (4.4.202-1.el7.elrepo.x86_64) 7 (Core)"? && reboot? ? ? ? ? ? ? ? ? ? ? ? ?#重啟后請確認(rèn)內(nèi)核版本是4.4

#?systemctl start docker && systemctl enable docker

## 配置deamon

#?cat > /etc/docker/daemon.json << EOF

{

? ?"exec-opts": ["native.cgroupdriver-systemd"],

? ?"log-driver": "json-file",

? ?"log-opts": {

? ? ?"max-size": "100m"

? ?}

}

EOF

#?mkdir -p /etc/systemd/system/docker.service.d

#?systemctl daemon-reload && systemctl restart docker && systemctl enable docker

12、安裝kubeadm(主從配置)

#?vim /etc/yum.repos.d/kubernetes.repo

[kubernetes]

name=kubernetes

baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64

enabled=1

gpgcheck=0

repo_gpgcheck=0

gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg

http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

#?yum -y install kubeadm-1.15.1 kubectl-1.15.1 kubelet-1.15.1

#?systemctl enable kubelet.service

13、上傳所需的鏡像(kubeadm-basic.images.tar)

#?tar xvf kubeadm-basic.images.tar.gz

#?vim load-images.sh

#!/bin/bash

#?ls /root/kubeadm-basic.images > /tmp/image-list.txt

#?cd /root/kubeadm-basic.images

for i in $(cat /tmp/image-list.txt)

do

? ? ? ? docker load -i $i

done

rm -rf /tmp/image-list.txt? ? ? ? ? ? ? ? ? ? ? ? ? ?

#?chmod a+x load-images.sh

#?. load-images.sh?

以下在主節(jié)點執(zhí)行:(此處指k8s-master01節(jié)點)

初始化主節(jié)點

#?kubeadm config print init-defaults > kubeadm-config.yaml

#?vim kubeadm-config.yaml

localAPIEndpoint:

? advertiseAddress: 172.20.120.187? ? ? ? ? ? ?#修改為主節(jié)點IP地址

kubernetesVersion: v1.15.1? ? ? ? ? ? ? ? ? ? ? ? ? #修改為正確的版本信息

networking:

? dnsDomain: cluster.local

? podSubnet: 10.244.0.0/16? ? ? ? ? ? ? ? ? ? ? ? ? #添加flannel網(wǎng)絡(luò)插件提供的pod子網(wǎng)的默認(rèn)地址

? serviceSubnet: 10.96.0.0/12

---? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #將默認(rèn)的調(diào)度方式改為ipvs方式

apiVersion: kubeproxy.config.k8s.io/v1alpha1? ? ? ? ? ? ? ? ? ?

kind: KubeProxyConfiguration

featureGates:

? SupportIPVSProxyMode: true

mode: ipvs

#?kubeadm init --config=kubeadm-config.yaml --experimental-upload-certs | tee kubeadm-initlog? ? ? ? ? ? ? #kubeadm初始化并記錄日志信息

#?mkdir -p $HOME/.kube

#?cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

#?chown $(id -u):$(id -g) $HOME/.kube/config

#?kubectl get node? ? ? ? ? ? ? ?#獲取節(jié)點狀態(tài),此處因沒有扁平化網(wǎng)絡(luò),所以status為noready;

部署網(wǎng)絡(luò):

#?mkdir -pv install-k8s/{core,plugin}

#?mv kubeadm-initlog kubeadm-config.yaml install-k8s/core? ? ? ? ? ? ? ? ? ? ?#kubeadm-initlog kubeadm-config.yaml需要留存

#?mkdir install-k8s/plugin/flannel

#?cd install-k8s/plugin/flannel

#?wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

#?kubectl create -f kube-flannel.yml?

驗證:

#?kubectl get pod -n kube-system? ? ? ? ? #查看名稱空間為kube-system的pod狀態(tài)

#?kubectl get node? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#此處狀態(tài)為ready

#?ifconfig | grep -A6 flannel? ? ? ? ? ? ? ? ? ?#flannel網(wǎng)絡(luò)信息

將其他節(jié)點加入主節(jié)點,在需要加入的節(jié)點執(zhí)行:(命令在kubeadm初始化時的日志中獲取)

#?kubeadm join 172.20.120.187:6443 --token abcdef.0123456789abcdef \

? ? --discovery-token-ca-cert-hash sha256:d968d2936e8d3af4e2765805fa041621c90447217281d761cdb17ca5e5eb9a40?

驗證:

#?kubectl get pod -n kube-system -o wide? ? ? ? ? ? ? ?#支持-w 表示監(jiān)視

#?kubectl get nodes? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#狀態(tài)應(yīng)該為ready,支持-w 表示監(jiān)視

企業(yè)級docker私有倉庫:harbor,此處單獨安裝在harbor節(jié)點? ?

https://github.com/goharbor/harbor/blob/master/docs/installation_guide.md

要求:

Docker engine? ? ? ? ? ? ? ? ? ? ?version 17.06.0-ce+ or higher? ? ? ?https://docs.docker.com/install/linux/docker-ce/centos/

Docker Compose? ? ? ? ? ? ? ?version 1.18.0 or higher? ? ? ? ? ? ? ? ? https://docs.docker.com/compose/install/

Openssllatest is preferred

安裝docker:

#?yum install -y yum-utils device-mapper-persistent-data lvm2

#?yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

#?yum install -y docker-ce

#?systemctl start docker && systemctl enable docker

## 配置deamon

#?cat > /etc/docker/daemon.json << EOF

{

? ?"exec-opts": ["native.cgroupdriver-systemd"],

? ?"log-driver": "json-file",

? ?"log-opts": {

? ? ?"max-size": "100m"

? ?}

}

EOF

#?mkdir -p /etc/systemd/system/docker.service.d

#?systemctl daemon-reload && systemctl restart docker && systemctl enable docker

驗證docker

#?docker --version

#?docker run hello-world

安裝docker-compose

#?curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

#?chmod +x /usr/local/bin/docker-compose

驗證docker-compose

#?docker-compose? --version

安裝harbor:https://github.com/goharbor/harbor/releases

#?curl -L? http://harbor.orientsoft.cn/harbor-1.2.0/harbor-offline-installer-v1.2.0.tgz -o /root/

#?tar xvf harbor-offline-installer-v1.2.0.tgz -C /usr/local/

準(zhǔn)備https所需證書

#?mkdir -pv /data/cert

#?cd /data/cert

#?openssl genrsa -des3 -out server.key 2048

#?openssl req -new -key server.key -out server.csr

#?cp server.key server.key.org

#?openssl rsa -in server.key.org -out server.key

#?openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt

修改harbor配置文件,并初始化

#?cd /usr/local/harbor/

#?vim harbor.cfg

hostname = hub.51dlx.com

ui_url_protocol = https

db_password = admin123

ssl_cert = /data/cert/server.crt

ssl_cert_key = /data/cert/server.key

harbor_admin_password = admin123

#?./prepare

#?./install.sh

驗證harbor:web訪問https://hub.nice.com? ??

配置docker訪問harbor,所有節(jié)點必須(含harbor本機(jī))

1、主機(jī)名和ip解析。

#?cat /etc/hosts

172.20.120.187 k8s-master01

172.20.120.184 k8s-node01

172.20.120.183 k8s-node02

172.20.120.182 hub.nice.com

2、將harbor列為可信倉庫,并重啟docker

#?vim /etc/docker/daemon.json

{

? ?"exec-opts": ["native.cgroupdriver-systemd"],

? ?"log-driver": "json-file",

? ?"log-opts": {

? ? ?"max-size": "100m"

? ?},

? ?"insecure-registries": ["https://hub.nice.com"]? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #將harbor列為可信倉庫

}

#?systemctl restart docker

驗證:

#?docker login https://hub.nice.com? ? ? ? ? ? ? #輸入賬號密碼,是否登錄成功

#?docker pull wangyanglinux/myapp:v1? ? ? ? #下載一個鏡像

#?docker tag wangyanglinux/myapp:v1 hub.nice.com/library/myapp:v1? ? ? ? ? ? ? ? ? #按照固定格式,修改鏡像tag

#?docker push hub.nice.com/library/myapp:v1? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#上傳修改后的鏡像到harbor,請到web上查看

#?docker rmi -f wangyanglinux/myapp:v1 hub.nice.com/library/myapp:v1? ? ? ? ? ? ? ?#刪除剛才下載和重命名的鏡像

harbor的相關(guān)操作:

1、停止

#?cd /usr/local/harbor

#?docker-compose stop

2、停止后重啟

#?cd /usr/local/harbor

#?docker-compose start

3、重新配置并啟動

#?cd /usr/local/harbor

#?docker-compose down -v

#?vim harbor.yml

# ./prepare

#?docker-compose up -d

在主節(jié)點操作(此處指k8s-master01節(jié)點):測試k8s集群狀態(tài),以及k8s和harbor的連接

#?kubectl run nginx-deployment --image=hub.nice.com/library/myapp:v1 --port=80 --replicas=1

#?kubectl get deployment

#?kubectl get rs

#?kubectl get pod -o wide? ? ? ? ? ? ? ? ? ? ? ? ? ?#查看pod詳細(xì)信息,如運行在哪個節(jié)點,驗證:在該節(jié)點docker ps -a | grep nginx查看

#?kubectl scale --replicas=3 deployment/nginx-deployment? ? ? ? ? ? ? ? ? #擴(kuò)展副本數(shù)為3

#?kubectl expose deployment nginx-deployment --port=20000 --target-port=80? ? ? ? ? ? ? ? ? ? ?#為nginx-deployment建議負(fù)載均衡

#?kubectl get svc? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

#?ipvsadm -Ln? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #查看具體負(fù)載的信息

#?kubectl edit svc nginx-deployment

type: NodePort? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#將nginx-deployment的模式改為NodePort,映射到主機(jī)端口

什么是資源?:k8s中所有的內(nèi)容都抽象為資源,資源實例化之后,叫做抽象

資源分類:

1、名稱空間級別:

a、工作負(fù)載型資源(workload):Pod、ReplicaSet、Deployment、StatefulSet、Daemonset、Job、Cronjob

b、服務(wù)發(fā)現(xiàn)及負(fù)載均衡型資源(ServiceDiscovery LoadBalance):Service、Ingress

c、配置與存儲型資源:Volume(存儲卷)、CSI(容器存儲接口,可擴(kuò)展各種各樣的第三方存儲卷)

d、特殊類型的存儲卷:ConfigMap(當(dāng)配置中心來使用的資源類型)、Secret(保存敏感數(shù)據(jù))、DownwardAPI(把外部環(huán)境中的信息輸出給容器)

2、集群級資源:Namespace、Node、Role、ClusterRole、RoleBinding、ClusterRoleBinding

3、元數(shù)據(jù)型資源:HPA、PodTemplate、LimitRange

#?kubectl explain -h? ? ? ? ? ? ? ? ? #獲取具體資源的幫助信息

如何寫一個pod模板?

#?vim pod.yaml

apiVersion: v1

kind: Pod

metadata:

name: myapp-pod

labels:

app: myapp

version: v1

spec:

containers:

- name: app

image: hub.nice.com/library/myapp:v1

#?kubectl apply -f pod.yaml? ?或者? kubectl create -f pod.yaml?

如何排錯?

#?kubectl get pod名稱 -o wide

#?kubectl describe pod pod名稱

#?kubectl log pod名稱 -c 容器名? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#查看具體pod內(nèi)某容器的日志信息

#?kubectl exec pod名稱 -c 容器名 -it -- /bin/sh? ? ? ? #進(jìn)入pod的容器內(nèi)

pod的生命周期:pause(網(wǎng)絡(luò)和存儲初始化)--》init容器(按順序執(zhí)行成功,且成功后退出)--》main容器

main容器內(nèi)的探針:是由kubelet對容器執(zhí)行的定期診斷。

探針分類:

1、ExecAction:在容器內(nèi)執(zhí)行命令。返回碼為0,則認(rèn)為診斷成功;

2、TCPSocketAction:對指定端口上的容器的IP地址進(jìn)行TCP檢查。端口開放,則認(rèn)為診斷成功;

3、HTTPGetAction:對指定端口和路徑上的容器的IP地址執(zhí)行HTTP Get請求。響應(yīng)的狀態(tài)碼大于等于200且小于400,則認(rèn)為診斷成功。

探測方式:

1、livenessProbe:指示容器是否正在運行。如果存活探測失敗,則kubelet會殺死容器,并且容器將受到其 重啟策略 的影響。

2、readinessProbe:指示容器是否準(zhǔn)備好服務(wù)請求。如果就緒探測失敗,則ready狀態(tài)顯示失敗,且端點控制器將從與pod匹配的所有service的端點中刪除該pod的ip地址。

結(jié)合liveness和readiness探針的樣例:存在index1.html則ready,不存在index.html則重啟pod,且readiness需要重新檢測。

apiVersion: v1

kind: Pod

metadata:

? name: readiness-liveness

? namespace: default

spec:

? containers:

? - name: app

? ? image: hub.nice.com/library/myapp:v1

? ? imagePullPolicy: IfNotPresent

? ? ports:

? ? - name: http

? ? ? containerPort: 80

? ? readinessProbe:

? ? ? httpGet:

? ? ? ? port: 80

? ? ? ? path: /index1.html

? ? ? initialDelaySeconds: 1

? ? ? periodSeconds: 3

? ? livenessProbe:

? ? ? httpGet:

? ? ? ? port: 80

? ? ? ? path: /index.html

? ? ? initialDelaySeconds: 1

? ? ? periodSeconds: 3

? ? ? timeoutSeconds: 10

什么是控制器?:kubernetes中內(nèi)建了很多控制器,即狀態(tài)機(jī),用來控制pod的具體狀態(tài)和行為。

控制器分類:

1、ReplicationController(RC已被淘汰)和ReplicaSet(RS):用來確保容器應(yīng)用的副本數(shù)始終保持在用戶定義的副本數(shù),即如果有容器異常退出,會自動創(chuàng)建新的Pod來替代;如果異常多出來的容器也會自動回收。RS支持通過標(biāo)簽(label)進(jìn)行集合式selector。

2、Deployment:為Pod和ReplicaSet提供了一個聲明式定義(declarative)方法,用來替代以前ReplicationController來方便的管理應(yīng)用。

典型的應(yīng)用場景包括:

a、定義deployment來創(chuàng)建pod和replicaset

b、滾動升級和回滾應(yīng)用

c、擴(kuò)容和縮容

d、暫停和繼續(xù)Deployment

3、DaemonSet:確保全部(或者一些)Node上運行一個Pod的副本,當(dāng)有Node加入集群時,也會為他們新增一個Pod。當(dāng)有Node從集群中移除時,這些Pod也會被回收。刪除DaemonSet將會刪除它創(chuàng)建的所有Pod。

典型用法:

a、運行集群存儲daemon

b、在每個Node上運行日志收集daemon

c、在每個Node上運行監(jiān)控daemon

4、StateFullSet:作為controller為pod提供唯一的標(biāo)識,它可以部署和scale的順序。是為了解決有狀態(tài)服務(wù)的問題(對應(yīng)deployment和replicaset是為無狀態(tài)服務(wù)而設(shè)計),其應(yīng)用場景包括:

a、穩(wěn)定的持久化存儲。即pod重新調(diào)度后還是能訪問到相同的持久化數(shù)據(jù),基于pvc來實現(xiàn)。

b、穩(wěn)定的網(wǎng)絡(luò)標(biāo)志。即pod重新調(diào)度后其podname和hostname不變,基于headless service(即沒有cluster ip的service)來實現(xiàn)。

c、有序部署、有序擴(kuò)展。即pod是有順序的,在部署或擴(kuò)展時要依據(jù)定義的順序依次進(jìn)行(即從0到N-1,在下一個pod運行之前所有之前的pod必須都是running和ready狀態(tài)),基于init container來實現(xiàn)。

d、有序收縮、有序刪除。(即從N-1到0)

5、Job/CronJob

Job:負(fù)責(zé)批處理任務(wù),即僅執(zhí)行一次的任務(wù),它保證批處理任務(wù)的一個或多個Pod成功結(jié)束。

CronJob:管理基于時間的Job。即a、在給定的時間點只運行一次;b、周期性在給定時間點運行。

6、Horizontal Pod Autoscaling:可根據(jù)應(yīng)用的資源使用率的高峰、低峰,使pod水平自動縮放,提高集群的整體資源利用率。

service的概念:是一個pod的邏輯分組,一種可以訪問它們的策略。通常稱為微服務(wù)。

service能夠提供負(fù)載均衡的能力,但是在使用上有限制:默認(rèn)只提供4層負(fù)載均衡能力,而沒有7層功能,但有時我們可能需要更多的匹配規(guī)則來轉(zhuǎn)發(fā)請求,這點上4層負(fù)載均衡是不支持的。如需提供7層負(fù)載均衡能力,通過插件ingress來實現(xiàn)。

service在k8s中有以下四種類型:

a、ClusterIp:默認(rèn)類型,自動分配一個僅cluster內(nèi)部可以訪問的虛擬ip。

b、NodePort:在clusterip基礎(chǔ)上為service在每臺機(jī)器上綁定一個端口,這樣就可以通過nodeip:nodeport來訪問該服務(wù)。

c、LoadBalancer:在nodeport基礎(chǔ)上,借助cloud provider創(chuàng)建一個外部負(fù)載均衡器,并將請求轉(zhuǎn)發(fā)到nodeip:nodeport。

d、ExternalName:把集群外部的服務(wù)引入集群內(nèi)部來,在集群內(nèi)部直接使用。沒有任何類型代理被創(chuàng)建,需要kubernetes 1.7+版本支持。

ingress-nginx? ? ? ? ? ? ? 官方網(wǎng)站:https://kubernetes.github.io/ingress-nginx/

由于所需的鏡像在國外無法下載,此處改為:

#?docker pull registry.aliyuncs.com/google_containers/nginx-ingress-controller:0.26.1

將鏡像上傳到harbor倉庫

#?docker tag registry.aliyuncs.com/google_containers/nginx-ingress-controller:0.26.1 hub.nice.com/library/nginx-ingress-controller:0.26.1

#?docker login hub.nice.com

#?docker push hub.nice.com/library/nginx-ingress-controller:0.26.1

k8s-master01節(jié)點操作:

#?mkdir -pv install-k8s/plugin/ingress

#?cd install-k8s/plugin/ingress

#?wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/mandatory.yaml

#?wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/baremetal/service-nodeport.yaml

修改mandatory.yaml,將鏡像位置指定到hub.nice.com/library/nginx-ingress-controller:0.26.1

#?vim mandatory.yaml

? ? ? ? ? image: hub.nice.com/library/nginx-ingress-controller:0.26.1

#?kubectl apply -f install-k8s/plugin/ingress/mandatory.yaml

#?kubectl get pod -n ingress-nginx? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#查看

#?kubectl apply -f service-nodeport.yaml

#?kubectl get svc -n ingress-nginx? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #查看

ingress http代理訪問

此處示例:www1.nice.com 和www2.nice.com 的http訪問

#?vim svc-1.yaml

apiVersion: extensions/v1beta1

kind: Deployment

metadata:

? name: deployment1

spec:

? replicas: 2

? template:

? ? metadata:

? ? ? labels:

? ? ? ? name: nginx1

? ? spec:

? ? ? containers:

? ? ? ? - name: nginx1

? ? ? ? ? image: wangyanglinux/myapp:v1

? ? ? ? ? imagePullPolicy: IfNotPresent

? ? ? ? ? ports:

? ? ? ? ? ? - containerPort: 80

---

apiVersion: v1

kind: Service

metadata:

? name: svc-1

spec:

? ports:

? ? - port: 80

? ? ? targetPort: 80

? ? ? protocol: TCP

? selector:

? ? name: nginx1

#?kubectl apply -f svc-1.yaml

#?vim svc-2.yaml

apiVersion: extensions/v1beta1

kind: Deployment

metadata:

? name: deployment2

spec:

? replicas: 2

? template:

? ? metadata:

? ? ? labels:

? ? ? ? name: nginx2

? ? spec:

? ? ? containers:

? ? ? ? - name: nginx2

? ? ? ? ? image: wangyanglinux/myapp:v2

? ? ? ? ? imagePullPolicy: IfNotPresent

? ? ? ? ? ports:

? ? ? ? ? ? - containerPort: 80

---

apiVersion: v1

kind: Service

metadata:

? name: svc-2

spec:

? ports:

? ? - port: 80

? ? ? targetPort: 80

? ? ? protocol: TCP

? selector:

? ? name: nginx2

#?kubectl apply -f svc-2.yaml

#?vim ingress.yaml?

apiVersion: extensions/v1beta1

kind: Ingress

metadata:

? name: ingress1

spec:

? rules:

? ? - host: www1.nice.com

? ? ? http:

? ? ? ? paths:

? ? ? ? - path: /

? ? ? ? ? backend:

? ? ? ? ? ? serviceName: svc-1

? ? ? ? ? ? servicePort: 80

---

apiVersion: extensions/v1beta1

kind: Ingress

metadata:

? name: ingress2

spec:

? rules:

? ? - host: www2.nice.com

? ? ? http:

? ? ? ? paths:

? ? ? ? - path: /

? ? ? ? ? backend:

? ? ? ? ? ? serviceName: svc-2

? ? ? ? ? ? servicePort: 80

#?kubectl apply -f ingress.yaml

查看及驗證:

#?kubectl get deployment -o wide

#?kubectl get deployment -o wide

#?kubectl get pod -n ingress-nginx

#?kubectl exec nginx-ingress-controller-6bbc7595b7-rmxbm -n ingress-nginx -it -- /bin/bash

#?kubectl get svc -o wide -n ingress-nginx? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #獲取ingress暴露的端口號

#?kubectl get ingress? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#查看所有ingress的規(guī)則信息? ? ?

做好域名解析后,瀏覽器訪問域名加端口號去確認(rèn)是否生效。

ingress https代理訪問

創(chuàng)建證書,以及 cert 存儲方式

#?mkdir install-k8s/https

#?cd install-k8s/https

#?openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=nginxsvc/O=nginxsvc"

#?kubectl create secret tls tls-secret --key tls.key --cert tls.crt

此處示例新建一個 www3.nice.com 的https訪問

#?cp svc-2.yaml install-k8s/https/svc-3.yaml

#?vim install-k8s/https/svc-3.yaml

apiVersion: extensions/v1beta1

kind: Deployment

metadata:

? name: deployment3

spec:

? replicas: 2

? template:

? ? metadata:

? ? ? labels:

? ? ? ? name: nginx3

? ? spec:

? ? ? containers:

? ? ? ? - name: nginx3

? ? ? ? ? image: wangyanglinux/myapp:v3

? ? ? ? ? imagePullPolicy: IfNotPresent

? ? ? ? ? ports:

? ? ? ? ? ? - containerPort: 80

---

apiVersion: v1

kind: Service

metadata:

? name: svc-3

spec:

? ports:

? ? - port: 80

? ? ? targetPort: 80

? ? ? protocol: TCP

? selector:

? ? name: nginx3

#?kubectl apply -f install-k8s/https/svc-3.yaml

#?vim install-k8s/https/https-ingress.yaml

apiVersion: extensions/v1beta1

apiVersion: extensions/v1beta1

kind: Ingress

metadata:

? name: ingress3

spec:

? tls:

? ? - hosts:

? ? ? - www3.nice.com

? ? ? secretName: tls-secret

? rules:

? ? - host: www3.nice.com

? ? ? http:

? ? ? ? paths:

? ? ? ? - path: /

? ? ? ? ? backend:

? ? ? ? ? ? serviceName: svc-3

? ? ? ? ? ? servicePort: 80

#?kubectl apply -f install-k8s/https/https-ingress.yaml

做好域名解析后,瀏覽器訪問域名加端口號去確認(rèn)是否生效。

Nginx 進(jìn)行 BasicAuth

# yum -y install httpd

# mkdir -pv basic-auth && cd basic-auth

# htpasswd -c auth foo

# kubectl create secret generic basic-auth --from-file=auth

此處示例對svc-1進(jìn)行認(rèn)證,auth.nice.com

# vim basic-auth.yaml

apiVersion: extensions/v1beta1

kind: Ingress

metadata:

? name: ingress-with-auth

? annotations:

? ? nginx.ingress.kubernetes.io/auth-type: basic

? ? nginx.ingress.kubernetes.io/auth-secret: basic-auth

? ? nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required - foo'

spec:

? rules:

? - host: auth.nice.com

? ? http:

? ? ? paths:

? ? ? - path: /

? ? ? ? backend:

? ? ? ? ? serviceName: svc-1

? ? ? ? ? servicePort: 80

# kubectl apply -f basic-auth.yaml

做好域名解析后,瀏覽器訪問域名加端口號去確認(rèn)是否生效。

kubenetes(k8s)學(xué)習(xí)筆記

此處示例:將www4.nice.com訪問重定向到https://www3.nice.com:30317

# vim rewrite.yaml

apiVersion: extensions/v1beta1

kind: Ingress

metadata:

? name: ingress-rw

? annotations:

? ? nginx.ingress.kubernetes.io/rewrite-target: https://www3.nice.com:30317

spec:

? rules:

? - host: www4.nice.com

? ? http:

? ? ? paths:

? ? ? - path: /

? ? ? ? backend:

? ? ? ? ? serviceName: svc-3

? ? ? ? ? servicePort: 80

kubectl apply -f rewrite.yaml

做好域名解析后,瀏覽器訪問域名加端口號去確認(rèn)是否生效。

kubernetes存儲分類:

一、configMap:ConfigMap API 給我們提供了向容器中注入配置信息的機(jī)制,ConfigMap 可以被用來保存單個屬性,也 可以用來保存整個配置文件或者 JSON 二進(jìn)制大對象(明文存儲)

二、Secret:解決了密碼、token、密鑰等敏感數(shù)據(jù)的配置問題,而不需要把這些敏感數(shù)據(jù)暴露到鏡像或者 Pod Spec 中。Secret 可以以 Volume 或者環(huán)境變量的方式使用 。有三種類型:?

1、Service Account :用來訪問 Kubernetes API,由 Kubernetes 自動創(chuàng)建,并且會自動掛載到 Pod 的 /run/secrets/kubernetes.io/serviceaccount 目錄中?

2、Opaque :base64編碼格式的Secret,用來存儲密碼、密鑰等?

3、kubernetes.io/dockerconfigjson :用來存儲私有 docker registry 的認(rèn)證信息

三、Volume:持久存儲容器中的文件和容器間共享文件。常用卷的類型:

1、empty:當(dāng) Pod 被分配給節(jié)點時,首先創(chuàng)建 emptyDir 卷,并且只要該 Pod 在該節(jié)點上運行,該卷就會存在。正如卷的名 字所述,它最初是空的。Pod 中的容器可以讀取和寫入 emptyDir 卷中的相同文件,盡管該卷可以掛載到每個容 器中的相同或不同路徑上。當(dāng)出于任何原因從節(jié)點中刪除 Pod 時, emptyDir 中的數(shù)據(jù)將被永久刪除;注意:容器崩潰不會從節(jié)點移除pod,因此empty卷中的數(shù)據(jù)在容器崩潰時是安全的。

2、hostPath:將主機(jī)節(jié)點的文件系統(tǒng)中的文件或目錄掛載到集群中。

四、PersistentVolume(pv持久卷):PV 是 Volume 之類的卷插件,但具有獨立于使用 PV 的 Pod 的生命周期。此 API 對象包含存儲實現(xiàn)的細(xì)節(jié),即 NFS、 iSCSI 或特定于云供應(yīng)商的存儲系統(tǒng)。

PersistentVolumeClaim(pvc持久卷聲明):是用戶存儲的請求。它與 Pod 相似。Pod 消耗節(jié)點資源,PVC 消耗 PV 資源。Pod 可以請求特定級別的資源 (CPU 和內(nèi)存)。聲明可以請求特定的大小和訪問模式(例如,可以以讀/寫一次或 只讀多次模式掛載)。

文章名稱:kubenetes(k8s)學(xué)習(xí)筆記
URL網(wǎng)址:http://jinyejixie.com/article6/gpihig.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計公司、面包屑導(dǎo)航、服務(wù)器托管、電子商務(wù)、品牌網(wǎng)站設(shè)計全網(wǎng)營銷推廣

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化
青河县| 南岸区| 鲁山县| 南通市| 翁牛特旗| 康马县| 南开区| 杨浦区| 德兴市| 胶南市| 平山县| 拉萨市| 广安市| 郓城县| 乌拉特前旗| 宁国市| 白朗县| 杭锦后旗| 武冈市| 玉门市| 大宁县| 吉木乃县| 长沙市| 绿春县| 化隆| 凤阳县| 商丘市| 噶尔县| 钟山县| 临沧市| 县级市| 华坪县| 广南县| 营山县| 龙陵县| 阿克苏市| 宣化县| 大关县| 资源县| 靖安县| 密云县|