真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

k8sKubernetesv1.10.0集群安裝以及踩坑過(guò)程

本篇文章為大家展示了k8s Kubernetes v1.10.0 集群安裝以及踩坑過(guò)程,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、成都小程序開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了壺關(guān)免費(fèi)建站歡迎大家使用!

因工作需求,最近開(kāi)始研究docker及k8s相關(guān)的資料,本文主要記錄 kubernetes 安裝過(guò)程及踩過(guò)的坑??邮峭Χ啵^(guò)來(lái)就好了!如有錯(cuò)漏,望予指正。

系統(tǒng)環(huán)境

CentOS 7.4

硬件環(huán)境

IP地址機(jī)器名稱角色
10.8.51.76server主節(jié)點(diǎn)
10.8.51.77node-1從節(jié)點(diǎn)
10.8.51.78node-2從節(jié)點(diǎn)

初始化環(huán)境

初始化環(huán)境之后,建議重新啟動(dòng)機(jī)器

修改主機(jī)名,建議統(tǒng)一

hostnamectl set-hostname server
hostnamectl set-hostname node-1
hostnamectl set-hostname node-2

修改/etc/hosts 文件增加主機(jī)映射

#node-2 為當(dāng)前節(jié)點(diǎn)的主機(jī)名稱
127.0.0.1   localhost node-2 localhost4 localhost4.localdomain4
::1         localhost node-2 localhost6 localhost6.localdomain6
10.8.51.76      server
10.8.51.77      node-1
10.8.51.78      node-2

免身份認(rèn)證(建議弄上,主要是方便)

ssh-keygen  #一路回車即可
ssh-copy-id  server
ssh-copy-id  node-1
ssh-copy-id  node-2

關(guān)閉防火墻、關(guān)閉Swap、關(guān)閉Selinux

#關(guān)閉防火墻
systemctl stop firewalld
systemctl disable firewalld

#關(guān)閉交換內(nèi)存,必須關(guān)閉.不關(guān)容易出錯(cuò)
swapoff -a 
sed -i 's/.*swap.*/#&/' /etc/fstab

#關(guān)閉selinux 
setenforce  0 
sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/sysconfig/selinux 
sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config 
sed -i "s/^SELINUX=permissive/SELINUX=disabled/g" /etc/sysconfig/selinux 
sed -i "s/^SELINUX=permissive/SELINUX=disabled/g" /etc/selinux/config 

#更改文件最大打開(kāi)數(shù)
echo "* soft nofile 65536" >> /etc/security/limits.conf
echo "* hard nofile 65536" >> /etc/security/limits.conf
echo "* soft nproc 65536"  >> /etc/security/limits.conf
echo "* hard nproc 65536"  >> /etc/security/limits.conf
echo "* soft  memlock  unlimited"  >> /etc/security/limits.conf
echo "* hard memlock  unlimited"  >> /etc/security/limits.conf

#配置IP轉(zhuǎn)發(fā),充許
編輯 /etc/sysctl.d/k8s.conf 文件,增加
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1

#完成后使其生效
sysctl -p /etc/sysctl.d/k8s.conf

Docker安裝

Kubernetes 1.10.0 與期相附的docker版本,不指定版本會(huì)導(dǎo)致docker版本過(guò)高,k8s無(wú)法正常啟動(dòng)

#下載指定版本docker
wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm
wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-17.03.2.ce-1.el7.centos.x86_64.rpm

#安裝
rpm -ivh docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm
rpm -ivh docker-ce-17.03.2.ce-1.el7.centos.x86_64.rpm

#設(shè)置開(kāi)機(jī)自啟
systemctl enable docker
#啟動(dòng)docker
systemctl start docker
#查看狀態(tài)
docker info 
#查看版本
docker version

此處可配置一下國(guó)內(nèi)鏡像加速

使用阿里云鏡像加速器:阿里云容器hub https://dev.aliyun.com/search.html;登錄之后,進(jìn)入管理中心-->鏡像加速器-->操作文檔,根據(jù)提示進(jìn)行設(shè)置即可。 如下圖:

k8s Kubernetes v1.10.0 集群安裝以及踩坑過(guò)程

配置Docker

這里要是不修改,容器無(wú)法透過(guò)自身的防火墻
開(kāi)啟iptables filter表的FORWARD鏈
編輯/lib/systemd/system/docker.service,在ExecStart=..上面加入如下內(nèi)容:

ExecStartPost=/usr/sbin/iptables -I FORWARD -s 0.0.0.0/0 -j ACCEPT
ExecStart=/usr/bin/dockerd

拉取鏡像,由于國(guó)內(nèi)無(wú)法連上google(k8s.gcr.io)相關(guān)服務(wù),需要事先將所需鏡像拉取過(guò)來(lái)。此處要是可以翻墻的話,可以省略以下步驟

server節(jié)點(diǎn)
#拉取鏡像
docker pull keveon/kube-apiserver-amd64:v1.10.0
docker pull keveon/kube-scheduler-amd64:v1.10.0
docker pull keveon/kube-controller-manager-amd64:v1.10.0
docker pull keveon/kube-proxy-amd64:v1.10.0
docker pull keveon/k8s-DNS-kube-dns-amd64:1.14.8
docker pull keveon/k8s-dns-dnsmasq-nanny-amd64:1.14.8
docker pull keveon/k8s-dns-sidecar-amd64:1.14.8
docker pull keveon/etcd-amd64:3.1.12
docker pull keveon/flannel:v0.10.0-amd64
docker pull keveon/pause-amd64:3.1

#修改鏡像名稱,與k8s原服務(wù)需求鏡像保持一致
docker tag keveon/kube-apiserver-amd64:v1.10.0 k8s.gcr.io/kube-apiserver-amd64:v1.10.0
docker tag keveon/kube-scheduler-amd64:v1.10.0 k8s.gcr.io/kube-scheduler-amd64:v1.10.0
docker tag keveon/kube-controller-manager-amd64:v1.10.0 k8s.gcr.io/kube-controller-manager-amd64:v1.10.0
docker tag keveon/kube-proxy-amd64:v1.10.0 k8s.gcr.io/kube-proxy-amd64:v1.10.0
docker tag keveon/k8s-dns-kube-dns-amd64:1.14.8 k8s.gcr.io/k8s-dns-kube-dns-amd64:1.14.8
docker tag keveon/k8s-dns-dnsmasq-nanny-amd64:1.14.8 k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64:1.14.8
docker tag keveon/k8s-dns-sidecar-amd64:1.14.8 k8s.gcr.io/k8s-dns-sidecar-amd64:1.14.8
docker tag keveon/etcd-amd64:3.1.12 k8s.gcr.io/etcd-amd64:3.1.12
docker tag keveon/flannel:v0.10.0-amd64 quay.io/coreos/flannel:v0.10.0-amd64
docker tag keveon/pause-amd64:3.1 k8s.gcr.io/pause-amd64:3.1

#刪除原鏡像
docker rmi keveon/kube-apiserver-amd64:v1.10.0
docker rmi keveon/kube-scheduler-amd64:v1.10.0
docker rmi keveon/kube-controller-manager-amd64:v1.10.0
docker rmi keveon/kube-proxy-amd64:v1.10.0
docker rmi keveon/k8s-dns-kube-dns-amd64:1.14.8
docker rmi keveon/k8s-dns-dnsmasq-nanny-amd64:1.14.8
docker rmi keveon/k8s-dns-sidecar-amd64:1.14.8
docker rmi keveon/etcd-amd64:3.1.12
docker rmi keveon/flannel:v0.10.0-amd64
docker rmi keveon/pause-amd64:3.1

 node節(jié)點(diǎn),拉取鏡像,其中 dashboard以及heapster也可放到主節(jié)點(diǎn)上

node 節(jié)點(diǎn)
#拉取鏡像
docker pull keveon/kube-proxy-amd64:v1.10.0
docker pull keveon/flannel:v0.10.0-amd64
docker pull keveon/pause-amd64:3.1
docker pull keveon/kubernetes-dashboard-amd64:v1.8.3
docker pull keveon/heapster-influxdb-amd64:v1.3.3
docker pull keveon/heapster-grafana-amd64:v4.4.3
docker pull keveon/heapster-amd64:v1.4.2

#修改鏡像名稱
docker tag keveon/flannel:v0.10.0-amd64 quay.io/coreos/flannel:v0.10.0-amd64
docker tag keveon/pause-amd64:3.1 k8s.gcr.io/pause-amd64:3.1
docker tag keveon/kube-proxy-amd64:v1.10.0 k8s.gcr.io/kube-proxy-amd64:v1.10.0
docker tag keveon/kubernetes-dashboard-amd64:v1.8.3 k8s.gcr.io/kubernetes-dashboard-amd64:v1.8.3
docker tag keveon/heapster-influxdb-amd64:v1.3.3 k8s.gcr.io/heapster-influxdb-amd64:v1.3.3
docker tag keveon/heapster-grafana-amd64:v4.4.3 k8s.gcr.io/heapster-grafana-amd64:v4.4.3
docker tag keveon/heapster-amd64:v1.4.2 k8s.gcr.io/heapster-amd64:v1.4.2

#刪除原鏡像
docker rmi keveon/kube-proxy-amd64:v1.10.0
docker rmi keveon/flannel:v0.10.0-amd64
docker rmi keveon/pause-amd64:3.1
docker rmi keveon/kubernetes-dashboard-amd64:v1.8.3
docker rmi keveon/heapster-influxdb-amd64:v1.3.3
docker rmi keveon/heapster-grafana-amd64:v4.4.3
docker rmi keveon/heapster-amd64:v1.4.2

安裝配置kubernetes

每個(gè)節(jié)點(diǎn)均需要執(zhí)行

修改 kubernetes 源

cat > /etc/yum.repos.d/kubernetes.repo <

安裝kubeadm

最新版使用 yum install -y kubeadm安裝,我們需要安裝指定版本,執(zhí)行

#查看有那些版本可以安裝
yum list kubeadm --showduplicates
#安裝指定版本
yum install kubeadm-1.10.0 kubectl-1.10.0-0 kubelet-1.10.0-0
#開(kāi)機(jī)啟動(dòng)
systemctl enable kubelet
#啟動(dòng)
systemctl start kubelet

這時(shí)系統(tǒng)啟動(dòng)時(shí),會(huì)報(bào)錯(cuò),先不用管他。因?yàn)檫€沒(méi)有初始化。初始化后就沒(méi)事了。

修改kubeadm 配置文件

#這里的坑不少,一定要注意文件編碼格式,行的未尾有沒(méi)有其它不可見(jiàn)字符.要不初始化的時(shí)候過(guò)不去

vi /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
 
#修改這一行,此處cgroupfs 要與docker info 中的一致
Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=cgroupfs"
#添加這一行
Environment="KUBELET_EXTRA_ARGS=--v=2 --fail-swap-on=false --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/k8sth/pause-amd64:3.0"


#完整版如下
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"
Environment="KUBELET_SYSTEM_PODS_ARGS=--pod-manifest-path=/etc/kubernetes/manifests --allow-privileged=true"
Environment="KUBELET_NETWORK_ARGS=--network-plugin=cni --cni-conf-dir=/etc/cni/net.d --cni-bin-dir=/opt/cni/bin"
Environment="KUBELET_DNS_ARGS=--cluster-dns=10.96.0.10 --cluster-domain=cluster.local"
Environment="KUBELET_AUTHZ_ARGS=--authorization-mode=Webhook --client-ca-file=/etc/kubernetes/pki/ca.crt"
Environment="KUBELET_CADVISOR_ARGS=--cadvisor-port=0"
Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=cgroupfs"
Environment="KUBELET_CERTIFICATE_ARGS=--rotate-certificates=true --cert-dir=/var/lib/kubelet/pki"
Environment="KUBELET_EXTRA_ARGS=--v=2 --fail-swap-on=false --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/k8sth/pause-amd64:3.0"
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_SYSTEM_PODS_ARGS $KUBELET_NETWORK_ARGS $KUBELET_DNS_ARGS $KUBELET_AUTHZ_ARGS $KUBELET_CADVISOR_ARGS $KUBELET_CGROUP_ARGS $KUBELET_CERTIFICATE_ARGS $KUBELET_EXTRA_ARGS $KUBELET_EXTRA_ARG


配置好后可使用
scp /etc/systemd/system/kubelet.service.d/10-kubeadm.conf root@node-1:/etc/systemd/system/kubelet.service.d/10-kubeadm.conf 
命令將文件傳輸至子節(jié)點(diǎn)

重新加載配置

#重新載入配置
systemctl daemon-reload
#重啟kubelet服務(wù)
systemctl restart kubelet

初始化集群

#初始化集群時(shí),增加自己本機(jī)IP地址,我們前的服務(wù)器為多網(wǎng)卡,指定其中主IP即可
kubeadm init --apiserver-advertise-address 10.8.51.76 --pod-network-cidr=10.244.0.0/16  --kubernetes-version=v1.10.0

#初始化失敗時(shí)重置命令
kubeadm reset

這里很關(guān)鍵,我有好幾次都是死在了這個(gè)地方。出錯(cuò)不要擔(dān)心,避免如下幾點(diǎn)可大大增加成功機(jī)率

1.配置文件中/etc/systemd/system/kubelet.service.d/10-kubeadm.conf  cgroupfs的設(shè)置與docker info的一致
2.編輯配置文件時(shí),注意行尾的不可見(jiàn)字符*******特別是ctrl +c ctrl + v 的朋友
3.拉取鏡像后的名稱不要忘記修改
4.查看出錯(cuò)日志 /var/log/messages

成功后的效果圖如下:(自己的忘記截了,這是網(wǎng)上找的)

k8s Kubernetes v1.10.0 集群安裝以及踩坑過(guò)程

將上圖信息中的

#這個(gè)的意思是就是將k8s配置到環(huán)境變量中,在那個(gè)目錄都可以任使用k8s命令,也可將此文件考備到其他節(jié)點(diǎn),在子節(jié)點(diǎn)上也可執(zhí)行集群的命令了
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

#這個(gè)要記好,子節(jié)點(diǎn)加入主節(jié)點(diǎn)需要執(zhí)行的命令,將下邊的命令在node-1,node-2中執(zhí)行,就可以將 node-1,和 node-2加入集群中
kubeadm join 10.8.51.76:6443 --token tncyyh.jycputhrslcs6f6d --discovery-token-ca-cert-hash sha256:099ebf2e5b7d07f35e**********fb7b20cdf923**********9fa70734f6acc73a48

查看集群狀態(tài)

kubectl get cs

NAME                 STATUS    MESSAGE              ERROR
scheduler            Healthy   ok                   
controller-manager   Healthy   ok                   
etcd-0               Healthy   {"health": "true"}

安裝網(wǎng)絡(luò)插件 flannel

#只要server端安裝即可
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl apply -f  kube-flannel.yml
clusterrole.rbac.authorization.k8s.io "flannel" created
clusterrolebinding.rbac.authorization.k8s.io "flannel" created
serviceaccount "flannel" created
configmap "kube-flannel-cfg" created
daemonset.extensions "kube-flannel-ds" created

安裝完成后,可使用kubectl get pod --all-namespaces 查看

kubectl get pod --all-namespaces

NAMESPACE     NAME                                    READY     STATUS    RESTARTS   AGE
kube-system   etcd-server                             1/1       Running   0          4h
kube-system   heapster-676cc864c6-g4jfj               1/1       Running   0          4h
kube-system   kube-apiserver-server                   1/1       Running   0          4h
kube-system   kube-controller-manager-server          1/1       Running   0          4h
kube-system   kube-dns-86f4d74b45-pm8z2               3/3       Running   0          4h
kube-system   kube-flannel-ds-amd64-6xlzz             1/1       Running   0          4h
kube-system   kube-flannel-ds-amd64-78clr             1/1       Running   0          4h
kube-system   kube-flannel-ds-amd64-qgjp2             1/1       Running   0          3h
kube-system   kube-proxy-5pqsw                        1/1       Running   0          4h
kube-system   kube-proxy-85m2p                        1/1       Running   0          3h
kube-system   kube-proxy-zgns8                        1/1       Running   0          4h
kube-system   kube-scheduler-server                   1/1       Running   0          4h
kube-system   kubernetes-dashboard-7d5dcdb6d9-bv8l2   1/1       Running   0          3h
kube-system   monitoring-grafana-69df66f668-ndcwk     1/1       Running   0          4h
kube-system   monitoring-influxdb-78d4c6f5b6-pgb89    1/1       Running   0          4h

 讓server 參與負(fù)載

kubectl taint nodes server node-role.kubernetes.io/master-

 向集群中加入 node

#這個(gè)是初始化后顯示出來(lái)的
kubeadm join 10.8.51.76:6443 --token tncyyh.jycputhrslcs6f6d --discovery-token-ca-cert-hash sha256:099ebf2e5b7d07f35e3ace5809f********3c2f758ab9f*******73a48

查看集群節(jié)點(diǎn)

kubectl get nodes
NAME      STATUS    ROLES     AGE       VERSION
node-1    Ready         4h        v1.10.0
node-2    Ready         3h        v1.10.0
server    Ready     master    4h        v1.10.0

--命令自動(dòng)補(bǔ)全

source <(kubectl completion bash)

echo "source <(kubectl completion bash)" >> ~/.bashrc

查看api服務(wù)

#瀏覽器執(zhí)行
https://10.8.51.76:6443

k8s Kubernetes v1.10.0 集群安裝以及踩坑過(guò)程

這是沒(méi)受限了,此時(shí)可以配置一個(gè)代理,使用非https訪問(wèn)即可

nohup kubectl proxy --port=8081 --address=10.8.51.76 --accept-hosts=^*$ &
#瀏覽器執(zhí)行
http://10.8.51.76:8081

k8s Kubernetes v1.10.0 集群安裝以及踩坑過(guò)程

妥了..要是能堅(jiān)持 到這里,就說(shuō)明k8s集群,已經(jīng)搭建成功了.下邊內(nèi)容可以選看了

安裝Dashboard插件

#下載kubernetes配置文件
wget https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml

#編輯kubernetes-dashboard.yaml 文件,指定端口

k8s Kubernetes v1.10.0 集群安裝以及踩坑過(guò)程

由于 K8S在1.6版本以后kube-apiserver 啟用了 RBAC 授權(quán),而官方源碼目錄的 dashboard-controller.yaml 沒(méi)有定義授權(quán)的 ServiceAccount,所以后續(xù)訪問(wèn) API server 的 API 時(shí)會(huì)被拒絕

創(chuàng)建一個(gè)kubernetes-dashboard-admin的ServiceAccount并授予集群admin的權(quán)限,創(chuàng)建kubernetes-dashboard-admin.rbac.yaml

---
apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard-admin
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: kubernetes-dashboard-admin
  labels:
    k8s-app: kubernetes-dashboard
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: kubernetes-dashboard-admin
  namespace: kube-system
#執(zhí)行命令
kubectl create -f kubernetes-dashboard.yaml
kubectl create -f kubernetes-dashboard-admin.rbac.yaml

安裝heapster插件

mkdir heapster
wget https://raw.githubusercontent.com/kubernetes/heapster/master/deploy/kube-config/influxdb/grafana.yaml
wget https://raw.githubusercontent.com/kubernetes/heapster/master/deploy/kube-config/rbac/heapster-rbac.yaml
wget https://raw.githubusercontent.com/kubernetes/heapster/master/deploy/kube-config/influxdb/heapster.yaml
wget https://raw.githubusercontent.com/kubernetes/heapster/master/deploy/kube-config/influxdb/influxdb.yaml

#查看以上下載配置誰(shuí)的中的鏡像版本是否與下載時(shí)的一致,不一致時(shí)修改成本地鏡像版本

kubectl create -f ./

查看token

kubectl get secret -n kube-system | grep dashboard-admin

kubectl describe -n kube-system secret/kubernetes-dashboard-admin-token-4lk94

訪問(wèn)dashboard

#瀏覽器輸入,這個(gè)30000端是我們剛才自己指定的
https://10.8.51.76:30000

k8s Kubernetes v1.10.0 集群安裝以及踩坑過(guò)程

此處選擇令牌輸入剛才查看的token,點(diǎn)擊登錄

k8s Kubernetes v1.10.0 集群安裝以及踩坑過(guò)程

好了.這回是完事了.

要是你的瀏覽器不能訪問(wèn)https,可參考,我用的瀏覽器chrmoe 各種方式都試了,都不行,最后使用下邊連接的方式成功了.可以看到了.

Dashboard使用自定義證書(shū) 

https://blog.csdn.net/chenleiking/article/details/81488028

本文參考綜合了網(wǎng)上的一些成功案例.

參考來(lái)源:

https://www.jianshu.com/p/42772740f09a

https://www.kubernetes.org.cn/3808.html

JAVA版API使用

我用的這個(gè),實(shí)現(xiàn)了通過(guò)ymal文件對(duì)pod的增、刪、改、查等一些基本操作

https://github.com/fabric8io/kubernetes-client

YMAL格式說(shuō)明

####################################################################

apiVersion: v1            //版本
kind: pod                 //類型,pod
metadata:                 //元數(shù)據(jù)
  name: String            //元數(shù)據(jù),pod的名字
  namespace: String       //元數(shù)據(jù),pod的命名空間
  labels:                 //元數(shù)據(jù),標(biāo)簽列表
    - name: String        //元數(shù)據(jù),標(biāo)簽的名字
  annotations:            //元數(shù)據(jù),自定義注解列表
    - name: String        //元數(shù)據(jù),自定義注解名字
spec:                     //pod中容器的詳細(xì)定義
  containers:             //pod中的容器列表,可以有多個(gè)容器
  - name: String          //容器的名稱
    image: String         //容器中的鏡像
    imagesPullPolicy: [Always|Never|IfNotPresent]//獲取鏡像的策略,默認(rèn)值為Always,每次都嘗試重新下載鏡像
    command: [String]     //容器的啟動(dòng)命令列表(不配置的話使用鏡像內(nèi)部的命令)
    args: [String]        //啟動(dòng)參數(shù)列表
    workingDir: String    //容器的工作目錄
    volumeMounts:         //掛載到到容器內(nèi)部的存儲(chǔ)卷設(shè)置
    - name: String
      mountPath: String   //存儲(chǔ)卷在容器內(nèi)部Mount的絕對(duì)路徑
      readOnly: boolean   //默認(rèn)值為讀寫(xiě)
    ports:                //容器需要暴露的端口號(hào)列表
    - name: String
      containerPort: int  //容器要暴露的端口
      hostPort: int       //容器所在主機(jī)監(jiān)聽(tīng)的端口(容器暴露端口映射到宿主機(jī)的端口,設(shè)置hostPort時(shí)同一臺(tái)宿主機(jī)將不能再啟動(dòng)該容器的第2份副本)
      protocol: String    //TCP和UDP,默認(rèn)值為T(mén)CP
    env:                  //容器運(yùn)行前要設(shè)置的環(huán)境列表
    - name: String
      value: String
    resources:            
      limits:             //資源限制,容器的最大可用資源數(shù)量
        cpu: Srting
        memory: String
      requeste:           //資源限制,容器啟動(dòng)的初始可用資源數(shù)量
        cpu: String
        memory: String
    livenessProbe:         //pod內(nèi)容器健康檢查的設(shè)置
      exec:
        command: [String]  //exec方式需要指定的命令或腳本
      httpGet:             //通過(guò)httpget檢查健康
        path: String
        port: number
        host: String
        scheme: Srtring
        httpHeaders:
        - name: Stirng
          value: String
      tcpSocket:           //通過(guò)tcpSocket檢查健康
        port: number
      initialDelaySeconds: 0//首次檢查時(shí)間
      timeoutSeconds: 0     //檢查超時(shí)時(shí)間
      periodSeconds: 0      //檢查間隔時(shí)間
      successThreshold: 0
      failureThreshold: 0
      securityContext:      //安全配置
        privileged: falae
    restartPolicy: [Always|Never|OnFailure]//重啟策略,默認(rèn)值為Always
    nodeSelector: object    //節(jié)點(diǎn)選擇,表示將該P(yáng)od調(diào)度到包含這些label的Node上,以key:value格式指定
    imagePullSecrets:
    - name: String
    hostNetwork: false      //是否使用主機(jī)網(wǎng)絡(luò)模式,棄用Docker網(wǎng)橋,默認(rèn)否
  volumes:                  //在該pod上定義共享存儲(chǔ)卷列表
  - name: String
    emptyDir: {}            //是一種與Pod同生命周期的存儲(chǔ)卷,是一個(gè)臨時(shí)目錄,內(nèi)容為空
    hostPath:               //Pod所在主機(jī)上的目錄,將被用于容器中mount的目錄
      path: string
    secret:                 //類型為secret的存儲(chǔ)卷
      secretName: String
      item:
      - key: String
        path: String
    configMap:             //類型為configMap的存儲(chǔ)卷
      name: String
      items:
      - key: String
        path: String

kubernetes目錄掛載

Docker本身有自己的目錄掛載, 但功能太單一, 一般也只能掛載本地目錄, K8S作為Docker容器的管理服務(wù), 除了能夠掛載本地的還能在線文件存儲(chǔ)目錄, 比如說(shuō)nfs

1. 本地目錄掛載

yml文件中配置如下

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: goserver
spec:
  replicas: 2
  template:
    metadata:
      labels:
        run: goserver
    spec:
      containers:
      - name: goserver
        image: registry.cn-hangzhou.aliyuncs.com/magina-centos7/goserver:1.0
        ports:
        - containerPort: 4040
        volumeMounts:
        - mountPath: /mnt/logs
          name: go-logs
      volumes:
      - name: go-logs
        hostPath:
          path: /mnt/logs/kubernetes/goserver

最后的volumes指定掛載目錄的名稱和路徑, 這個(gè)目錄是本地的, 也就是說(shuō)pod只會(huì)掛載當(dāng)前宿主機(jī)的目錄, 但當(dāng)我們有多個(gè)節(jié)點(diǎn), 而這些節(jié)點(diǎn)上又有運(yùn)行著相同的項(xiàng)目, 而我們需要收集這些項(xiàng)目的日志, 用本地掛載的方式顯得很麻煩, 當(dāng)然, 我們可以用分布式日志工具去處理, 這里介紹另外一種方式, 網(wǎng)絡(luò)文件系統(tǒng)nfs

2. 網(wǎng)絡(luò)文件系統(tǒng)nfs

yml文件中配置如下

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: goserver
spec:
  replicas: 2
  template:
    metadata:
      labels:
        run: goserver
    spec:
      containers:
      - name: goserver
        image: registry.cn-hangzhou.aliyuncs.com/magina-centos7/goserver:1.0
        ports:
        - containerPort: 4040
        volumeMounts:
        - mountPath: /mnt/logs
          name: go-logs
  volumes:
  - name: go-log
    nfs:
      server: nfs4.yinnote.com
      path: /prod/logs/goserver

這里使用了nfs標(biāo)簽, 也就是將當(dāng)前目錄掛載到了遠(yuǎn)程文件系統(tǒng), 這里的server指的是遠(yuǎn)程文件系統(tǒng)路徑, 需要自己去配置, 或者直接買其他云服務(wù)廠商的文件系統(tǒng), 這樣做的好處是, 不管哪個(gè)節(jié)點(diǎn), 哪個(gè)pod, 都可以將日志打到統(tǒng)一的地方

另外, 如果我們使用了nfs文件系統(tǒng), 必須要在每臺(tái)節(jié)點(diǎn)上面安裝nfs-utils工具包, 否則pod會(huì)無(wú)法啟動(dòng)

yum install nfs-utils

導(dǎo)入導(dǎo)出鏡像容 器

pull不下來(lái)鏡像。

可以通過(guò) docker 提供把鏡像導(dǎo)出export(保存save)為文件的機(jī)制,這樣就可以把鏡像copy到任意地方了。

1. 導(dǎo)出 export - 導(dǎo)入 import

格式:docker export CONTAINER(容器)

使用 docker ps -a 查看本機(jī)已有的容器,如:

[root@docker1 LAMP]# docker ps -a

CONTAINER ID    IMAGE     COMMAND    CREATED     STATUS      PORTS                          NAMES

dd43b6de6b33 weblogic:jdk1.6 "/run.sh" 3 days ago   Up 3 days  0.0.0.0:32771->22/tcp, 0.0.0.0:32770->7001/tcp   peaceful_saha

aca388afeddf sshd:centos   "/run.sh" 4 days ago    Up 4 days  0.0.0.0:32769->22/tcp                   grave_turing

......

[root@docker1 LAMP]# docker export dd43b6de6b33 >/home/weblogic:jdk1.6.tar

[root@docker1 LAMP]# cd /home

[root@docker1 home]# ls

weblogic:jdk1.6.tar

導(dǎo)出完成后,就可以使用 import 導(dǎo)入了

[root@docker1 home]# docker import - /home/weblogic:jdk1.6.tar

2.保存save - 加載 load

格式:docker save IMAGE(鏡像)

使用 docker images 查看本機(jī)已有的鏡像(也可以使用 docker commit 命令把一個(gè)正在運(yùn)行的容器保存為鏡像),如:

[root@docker1 LAMP]# docker images

REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE

......

docker.io/tutum/lamp      latest              3d49e175ec00        22 months ago       426.9 MB

......

[root@docker1 LAMP]# docker save 3d49e175ec00 >lamp.tar

[root@docker1 LAMP]# ls

Dockerfile  lamp.tar

[root@docker1 LAMP]# sz lamp.tar 

rz

Starting zmodem transfer.  Press Ctrl+C to cancel.

Transferring lamp.tar...

  100%  430366 KB    14345 KB/sec    00:00:30       0 Errors

有點(diǎn)慢,稍微等待一下,沒(méi)有任何warn信息就表示保存OK。3d49e175ec00 是鏡像ID

現(xiàn)在就可以在任何裝 docker 的地方加載 剛保存的鏡像了

[root@docker1 home]# docker load < /lamp/lamp.tar

3.導(dǎo)出 export 與 保存 save 的區(qū)別

 (1).export導(dǎo)出的鏡像文件大小  小于 save保存的鏡像

 (2).export 導(dǎo)出(import導(dǎo)入)是根據(jù)容器拿到的鏡像,再導(dǎo)入時(shí)會(huì)丟失鏡像所有的歷史,所以無(wú)法進(jìn)行回滾操作(docker tag );而save保存(load加載)的鏡像,沒(méi)有丟失鏡像的歷史,可以回滾到之前的層(layer)。(查看方式:docker images --tree)

注:導(dǎo)入加載進(jìn)來(lái)覺(jué)得不合適可以使用 docker rm 容器ID 、 docker rmi 鏡像ID 來(lái)刪掉。

移除所有的容器和鏡像(大掃除):

代碼如下:

docker kill $(docker ps -q) ; docker rm $(docker ps -a -q) ; docker rmi $(docker images -q -a)

上述內(nèi)容就是k8s Kubernetes v1.10.0 集群安裝以及踩坑過(guò)程,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


網(wǎng)頁(yè)標(biāo)題:k8sKubernetesv1.10.0集群安裝以及踩坑過(guò)程
網(wǎng)頁(yè)網(wǎng)址:http://weahome.cn/article/ihhcei.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部