DOCKER學習(二)--Kubernetes(v1.12.1)叢集安裝
本文使用Kubeadm安裝Kubernetes
kubeadm是Kubernetes官方提供的用於快速安裝Kubernetes叢集的工具,伴隨Kubernetes每個版本的釋出都會同步更新,kubeadm會對叢集配置方面的一些實踐做調整,通過實驗kubeadm可以學習到Kubernetes官方在叢集配置上一些新的最佳實踐。
1.準備
1.1 系統配置
系統如下:
- Ubuntu 16.04+
- Debian 9
- CentOS 7
- RHEL 7
- Fedora 25/26 (best-effort)
- HypriotOS v1.0.1+
- Container Linux (tested with 1800.6.0)
記憶體與CPU:
- 2 GB or more of RAM per machine (any less will leave little room for your apps)
- 2 CPUs or more
1.2 系統配置
如果各個主機啟用了防火牆,需要開放Kubernetes各個元件所需要的埠:
Master node(s)
Protocol | Direction | Port Range | Purpose | Used By |
---|---|---|---|---|
TCP | Inbound | 6443* | Kubernetes API server | All |
TCP | Inbound | 2379-2380 | etcd server client API | kube-apiserver, etcd |
TCP | Inbound | 10250 | Kubelet API | Self, Control plane |
TCP | Inbound | 10251 | kube-scheduler | Self |
TCP | Inbound | 10252 | kube-controller-manager | Self |
Worker node(s)
Protocol | Direction | Port Range | Purpose | Used By |
---|---|---|---|---|
TCP | Inbound | 10250 | Kubelet API | Self, Control plane |
TCP | Inbound | 30000-32767 | NodePort Services** | All |
或者禁用防火牆:
systemctl stop firewalld
systemctl disable firewalld
禁用SELINUX:
setenforce 0
vi /etc/selinux/config
SELINUX=disabled
建立/etc/sysctl.d/k8s.conf檔案,新增如下內容:
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
執行命令使修改生效:
modprobe br_netfilter
sysctl -p /etc/sysctl.d/k8s.conf
1.3 修改配置主機名
vim /etc/hosts
#新增相應的主機資訊
192.168.0.10 app-tahjv1fe-1
1.4 安裝docker
安裝docker之後需要確認一下iptables filter表中FOWARD鏈的預設策略(pollicy)為ACCEPT
iptables -nvL
Chain INPUT (policy ACCEPT 45403 packets, 59M bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 DOCKER-USER all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 DOCKER-ISOLATION-STAGE-1 all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- * docker0 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
0 0 DOCKER all -- * docker0 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- docker0 !docker0 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- docker0 docker0 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- * docker_gwbridge 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
0 0 DOCKER all -- * docker_gwbridge 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- docker_gwbridge !docker_gwbridge 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- docker_gwbridge docker_gwbridge 0.0.0.0/0 0.0.0.0/0
Docker從1.13版本開始調整了預設的防火牆規則,禁用了iptables filter表中FOWARD鏈,這樣會引起Kubernetes叢集中跨Node的Pod無法通訊。但這裡通過安裝docker 1806,發現預設策略又改回了ACCEPT,這個不知道是從哪個版本改回的。
如果是DROP狀態,使用一下語句開啟:
sed -i "13i ExecStartPost=/usr/sbin/iptables -P FORWARD ACCEPT" /usr/lib/systemd/system/docker.service
然後重新啟動docker:
systemctl daemon-reload
systemctl restart docker
2. 使用Kubeadm安裝kubernetes
2.1安裝kubeadm和kubelet
在各節點安裝kubeadm和kubelet,這裡配置使用aliyun的yum源:
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
yum makecache fast
yum install -y kubelet kubeadm kubectl
執行kubelet –help可以看到原來kubelet的絕大多數命令列flag引數都被DEPRECATED了,如:
--address 0.0.0.0 The IP address for the Kubelet to serve on (set to 0.0.0.0 for all IPv4 interfaces and `::` for all IPv6 interfaces) (default 0.0.0.0) (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
而官方推薦我們使用–config指定配置檔案,並在配置檔案中指定原來這些flag所配置的內容。這也是Kubernetes為了支援動態Kubelet配置(Dynamic Kubelet Configuration)才這麼做的。kubelet的配置檔案必須是json或yaml格式。
Kubernetes 1.8開始要求關閉系統的Swap,如果不關閉,預設配置下kubelet將無法啟動。或者使用配置檔案去掉這個限制。
關閉系統swap:
swapoff -a
一般當前使用的伺服器可能還執行其他服務,關閉swap可能會對其他服務產生影響,所以這裡修改kubelet的配置去掉這個限制。修改配置檔案:
vi /etc/sysconfig/kubelet
#add args to KUBELET_EXTRA_ARGS
KUBELET_EXTRA_ARGS=--fail-swap-on=false
2.2 使用kubeadm init初始化服務
在各節點開啟機啟動kubelet服務
systemctl enable kubelet
接下來使用kubeadm初始化叢集,選擇app-tahjv1fe-1作為Master Node,在app-tahjv1fe-1上執行下面的命令:
kubeadm init \
--kubernetes-version=v1.12.1 \
--pod-network-cidr=10.244.0.0/16 \
--apiserver-advertise-address=192.168.0.10 \
--apiserver-cert-extra-sans=$(hostname) \
--ignore-preflight-errors=Swap
可以使用--insecure-port=port修改api server監聽埠。
因為我們選擇flannel作為Pod網路外掛,所以上面的命令指定–pod-network-cidr=10.244.0.0/16。
直接執行初始化語句會報錯:
[ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-apiserver:v1.12.1 [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-controller-manager:v1.12.1 [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-scheduler:v1.12.1 [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-proxy:v1.12.1 [ERROR ImagePull]: failed to pull image k8s.gcr.io/pause:3.1 [ERROR ImagePull]: failed to pull image k8s.gcr.io/etcd:3.2.24 [ERROR ImagePull]: failed to pull image k8s.gcr.io/coredns:1.2.2
k8s.gcr.io是谷歌域名,在國內不能直接訪問,無法直接從google拉取映象。
解決辦法:新建指令碼,從dockerhub上拉取相應的映象,然後重新tag到kubeadm所需要的名稱
vim ./kubernetes.sh
images=(kube-apiserver:v1.12.1 kube-controller-manager:v1.12.1 kube-scheduler:v1.12.1 kube-proxy:v1.12.1 pause:3.1 etcd:3.2.24 coredns:1.2.2)
for imageName in ${images[*]}
do
docker pull fengzos/$imageName
docker tag fengzos/$imageName k8s.gcr.io/$imageName
docker rmi fengzos/$imageName
done
chmod +x ./kubernetes.sh
./kubernetes.sh
執行指令碼之後再進行初始化操作。如果初始化失敗需要重新進行初始化,需要先進行reset一下:
kubeadm reset
然後再執行初始化指令碼。執行成功如下:
[bootstraptoken] using token: 62u3or.7rvaxpgra3r9c1u9
[bootstraptoken] configured RBAC rules to allow Node Bootstrap tokens to post CSRs in order for nodes to get long term certificate credentials
[bootstraptoken] configured RBAC rules to allow the csrapprover controller automatically approve CSRs from a Node Bootstrap Token
[bootstraptoken] configured RBAC rules to allow certificate rotation for all node client certificates in the cluster
[bootstraptoken] creating the "cluster-info" ConfigMap in the "kube-public" namespace
[addons] Applied essential addon: CoreDNS
[addons] Applied essential addon: kube-proxy
Your Kubernetes master has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
You can now join any number of machines by running the following on each node
as root:
kubeadm join 192.168.0.10:6443 --token 62u3or.7rvaxpgra3r9c1u9 --discovery-token-ca-cert-hash sha256:0fe59a4d41817cff8d3190a0e3c541219957abd938c4f9243d03782523c663dc
把生成的join命令儲存下來,留待其他節點加入叢集時使用。
下面的命令是配置常規使用者如何使用kubectl訪問叢集,為當前使用者配置kubernetes的配置檔案:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
使用 kubectl version檢視叢集情況:
# kubectl version
Client Version: version.Info{Major:"1", Minor:"12", GitVersion:"v1.12.1", GitCommit:"4ed3216f3ec431b140b1d899130a69fc671678f4", GitTreeState:"clean", BuildDate:"2018-10-05T16:46:06Z", GoVersion:"go1.10.4", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"12", GitVersion:"v1.12.1", GitCommit:"4ed3216f3ec431b140b1d899130a69fc671678f4", GitTreeState:"clean", BuildDate:"2018-10-05T16:36:14Z", GoVersion:"go1.10.4", Compiler:"gc", Platform:"linux/amd64"}
檢視一下叢集狀態:
kubectl get cs
NAME STATUS MESSAGE ERROR
controller-manager Healthy ok
scheduler Healthy ok
etcd-0 Healthy {"health": "true"}
檢視節點資訊:
# kubectl get node -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
app-tahjv1fe-1 NotReady master 176m v1.12.1 192.168.0.10 <none> CentOS Linux 7 (Core) 3.10.0-862.el7.x86_64 docker://18.6.1
在這裡可以看到1.12版本的kubeadm額外給app-tahjv1fe-1節點設定了一個汙點(Taint):node.kubernetes.io/not-ready:NoSchedule,很容易理解,即如果節點還沒有ready之前,是不接受排程的。可是如果Kubernetes的網路外掛還沒有部署的話,節點是不會進入ready狀態的。
2.3 安裝Pod Network
接下來安裝flannel network add-on:
mkdir -p ~/k8s/
cd ~/k8s
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-amd64 created
daemonset.extensions/kube-flannel-ds-arm64 created
daemonset.extensions/kube-flannel-ds-arm created
daemonset.extensions/kube-flannel-ds-ppc64le created
daemonset.extensions/kube-flannel-ds-s390x created
這裡注意kube-flannel.yml這個檔案裡的flannel的映象是0.10.0,quay.io/coreos/flannel:v0.10.0-amd64
如果Node有多個網絡卡的話,目前需要在kube-flannel.yml中使用--iface引數指定叢集主機內網網絡卡的名稱,否則可能會出現dns無法解析。flanneld啟動引數加上--iface=<iface-name>
...... containers: - name: kube-flannel image: quay.io/coreos/flannel:v0.10.0-amd64 command: - /opt/bin/flanneld args: - --ip-masq - --kube-subnet-mgr - --iface=eth1 ......
本次按上面的步驟部署flannel,發現沒有效果,檢視一下叢集中的daemonset:
# kubectl get ds -l app=flannel -n kube-system
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
kube-flannel-ds-amd64 1 1 1 1 1 beta.kubernetes.io/arch=amd64 38m
kube-flannel-ds-arm 0 0 0 0 0 beta.kubernetes.io/arch=arm 38m
kube-flannel-ds-arm64 0 0 0 0 0 beta.kubernetes.io/arch=arm64 38m
kube-flannel-ds-ppc64le 0 0 0 0 0 beta.kubernetes.io/arch=ppc64le 38m
kube-flannel-ds-s390x 0 0 0 0 0 beta.kubernetes.io/arch=s390x 38m
結合kube-flannel.yml,fannel官方的部署yaml檔案是要在叢集中建立5個針對不同平臺的DaemonSet,通過Node的Label beta.kubernetes.i/oarch,在對應不同平臺的Node節點上啟動flannel的容器。當前的app-tahjv1fe-1節點是beta.kubernetes.i/oarch=amd64,因此對於kube-flannel-ds-amd64這個DaemonSet來說,它的DESIRED數量應該為1才對。
使用kubectl get pod --all-namespaces -o wide確保所有的Pod都處於Running狀態。
# kubectl get pod --all-namespaces -o wide
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE
kube-system coredns-576cbf47c7-f4w7l 1/1 Running 0 64m 10.244.0.3 app-tahjv1fe-1 <none>
kube-system coredns-576cbf47c7-xcgpf 1/1 Running 0 64m 10.244.0.2 app-tahjv1fe-1 <none>
kube-system etcd-app-tahjv1fe-1 1/1 Running 1 63m 192.168.0.10 app-tahjv1fe-1 <none>
kube-system kube-apiserver-app-tahjv1fe-1 1/1 Running 0 63m 192.168.0.10 app-tahjv1fe-1 <none>
kube-system kube-controller-manager-app-tahjv1fe-1 1/1 Running 7 64m 192.168.0.10 app-tahjv1fe-1 <none>
kube-system kube-flannel-ds-amd64-8qp72 1/1 Running 0 42m 192.168.0.10 app-tahjv1fe-1 <none>
kube-system kube-proxy-jr42n 1/1 Running 0 64m 192.168.0.10 app-tahjv1fe-1 <none>
kube-system kube-scheduler-app-tahjv1fe-1 1/1 Running 7 63m 192.168.0.10 app-tahjv1fe-1 <none>
2.4 master node 參與工作負載
使用kubeadm初始化的叢集,出於安全考慮Pod不會被排程到Master Node上,也就是說Master Node不參與工作負載。這是因為當前的master節點app-tahjv1fe-1被打上了node-role.kubernetes.io/master:NoSchedule的汙點,可以修改這個配置,讓master參與工作排程,去掉這個汙點使app-tahjv1fe-1參與工作負載:
# kubectl taint nodes app-tahjv1fe-1 node-role.kubernetes.io/master-
node "app-tahjv1fe-1" untainted
2.5 向Kubernetes叢集中新增Node節點
下面我們將app-tahjv1fe-2這個主機新增到Kubernetes叢集中,因為我們同樣在app-tahjv1fe-2上的kubelet的啟動引數中去掉了必須關閉swap的限制,所以同樣需要–ignore-preflight-errors=Swap這個引數。 在app-tahjv1fe-2上執行:
kubeadm join 192.168.0.10:6443 --token 62u3or.7rvaxpgra3r9c1u9 --discovery-token-ca-cert-hash sha256:0fe59a4d41817cff8d3190a0e3c541219957abd938c4f9243d03782523c663dc --ignore-preflight-errors=Swap
......
This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.
Run 'kubectl get nodes' on the master to see this node join the cluster.
app-tahjv1fe-2加入叢集很是順利,下面在master節點上執行命令檢視叢集中的節點:
# kubectl get node
NAME STATUS ROLES AGE VERSION
app-tahjv1fe-1 Ready master 149m v1.12.1
app-tahjv1fe-2 Ready <none> 52m v1.12.1
如何從叢集中移除Node
如果需要從叢集中移除app-tahjv1fe-2這個Node執行下面的命令:
在master節點上執行:
kubectl drain app-tahjv1fe-2 --delete-local-data --force --ignore-daemonsets
kubectl delete node app-tahjv1fe-2
在app-tahjv1fe-2上執行:
kubeadm reset
ifconfig cni0 down
ip link delete cni0
ifconfig flannel.1 down
ip link delete flannel.1
rm -rf /var/lib/cni/
3.Kubernetes常用元件部署
越來越多的公司和團隊開始使用Helm這個Kubernetes的包管理器,我們也將使用Helm安裝Kubernetes的常用元件。
3.1 Helm的安裝
Helm由helm客戶端和tiller服務端組成,Helm的安裝十分簡單。 下載helm命令列工具到master節點app-tahjv1fe-1的/usr/local/bin下,這裡下載的2.11.0版本:
wget https://storage.googleapis.com/kubernetes-helm/helm-v2.11.0-linux-amd64.tar.gz
tar -zxvf helm-v2.11.0-linux-amd64.tar.gz
cd linux-amd64/
cp helm /usr/local/bin/
為了安裝服務端tiller,還需要在這臺機器上配置好kubectl工具和kubeconfig檔案,確保kubectl工具可以在這臺機器上訪問apiserver且正常使用。 這裡的app-tahjv1fe-1節點以及配置好了kubectl。
因為Kubernetes APIServer開啟了RBAC訪問控制,所以需要建立tiller使用的service account: tiller並分配合適的角色給它。這裡簡單起見直接分配cluster-admin這個叢集內建的ClusterRole給它。建立rbac-config.yaml檔案:
cd ~/k8s/
vim rbac-config.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: tiller
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: tiller
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: tiller
namespace: kube-system
# kubectl create -f rbac-config.yaml
serviceaccount/tiller created
clusterrolebinding.rbac.authorization.k8s.io/tiller created
接下來使用helm部署tiller:
helm init --service-account tiller --skip-refresh
如果直接執行部署語句,要連結 https://kubernetes-charts.storage.googleapis.com去下載映象;在國內這個地址不能直接訪問,所以需要下載其他映象;docker pull fengzos/tiller:v2.11.0這個映象是直接從gcr.io/kubernetes-helm/tiller:v2.11.0繼承過來的,可以直接使用。
docker pull fengzos/tiller
helm init --service-account tiller --upgrade -i fengzos/tiller:latest --skip-refresh
tiller預設被部署在k8s叢集中的kube-system這個namespace下:
# kubectl get pod -n kube-system -l app=helm
NAME READY STATUS RESTARTS AGE
tiller-deploy-8999b76d9-nx57p 1/1 Running 0 2m6s
3.2 使用Helm部署Nginx Ingress
為了便於將叢集中的服務暴露到叢集外部,從叢集外部訪問,接下來使用Helm將Nginx Ingress部署到Kubernetes上。 Nginx Ingress Controller被部署在Kubernetes的邊緣節點上,這裡簡單起見,只有一個edge節點。
我們將app-tahjv1fe-1(192.168.0.10)同時做為邊緣節點,打上Label:
# kubectl label node app-tahjv1fe-1 node-role.kubernetes.io/edge=
node/app-tahjv1fe-1 labeled
# kubectl get node
NAME STATUS ROLES AGE VERSION
app-tahjv1fe-1 Ready edge,master 4h59m v1.12.1
app-tahjv1fe-2 Ready <none> 3h22m v1.12.1
3.3 使用Helm部署dashboard
ingress:
enabled: true
image:
repository: fengzos/kubernetes-dashboard-amd64
tag: "v1.10.0"
pullPolicy: IfNotPresent
annotations:
nginx.ingress.kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/ssl-redirect: "true"
nginx.ingress.kubernetes.io/secure-backends: "true"
rbac:
clusterAdminRole: true
helm install stable/kubernetes-dashboard \
-n kubernetes-dashboard \
--namespace kube-system \
-f kubernetes-dashboard.yaml
#kubectl -n kube-system get secret | grep kubernetes-dashboard-token
kubernetes-dashboard-token-tjj25 kubernetes.io/service-account-token 3 37s
#kubectl describe -n kube-system secret/kubernetes-dashboard-token-tjj25
Name: kubernetes-dashboard-token-tjj25
Namespace: kube-system
Labels: <none>
Annotations: kubernetes.io/service-account.name=kubernetes-dashboard
kubernetes.io/service-account.uid=d19029f0-9cac-11e8-8d94-080027db403a
Type: kubernetes.io/service-account-token
Data
====
namespace: 11 bytes
token: eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZC10b2tlbi10amoyNSIsImt1YmVy
登入https://192.168.0.10,然後使用token登入
相關推薦
DOCKER學習(二)--Kubernetes(v1.12.1)叢集安裝
本文使用Kubeadm安裝Kubernetes kubeadm是Kubernetes官方提供的用於快速安裝Kubernetes叢集的工具,伴隨Kubernetes每個版本的釋出都會同步更新,kubeadm會對叢集配置方面的一些實踐做調整,通過實驗kubeadm可以學習到
docker學習 (二)
ner 命名 post latest nbsp 動態 應用 test 自己的 基本概念: Docker包括三個基本概念: 鏡像(Image): 特殊的文件系統,提供容器運行時所需的程序、庫、資源、配置文件。鏡像不包含動態數據,內容在構建後不會被改變。 容器(Contai
docker學習(二)——docker的基本概念及基礎使用
一張圖概括整篇文章內容: 來自:https://medium.com/@nagarwal/lifecycle-of-docker-container-d2da9f85959 lxc->libcontainer->runC OCI(Open Container I
Docker學習(二)- Docker 安裝 Jenkins
## 一、拉取映象 我這裡安裝的版本是2.222.3-centos,可以去這裡獲取你需要的版本: https://hub.docker.com/_/jenkins?tab=tags ```shell docker pull jenkins/jenkins:2.222.3-centos ``` ## 二、建立本
reids叢集學習(二)使用jedis實現redis叢集客戶端
上一節我記錄瞭如何搭建redis官方的叢集,這節我就開始講怎麼用jedis實現叢集環境下的客戶端。 jedis中實現叢集的客戶端類是redis.clients.jedis.JedisClust
使用kubeadm快速部署Kubernetes(v1.12.1)叢集---來源:馬哥教育馬哥原創
使用kubeadm快速部署Kubernetes(v1.12.1)叢集------來源:馬哥教育馬哥原創 Kubernetes技術已經成為了原生雲技術的事實標準,它是目前基礎軟體領域最為熱門的分散式排程和管理平臺。於是,Kubernetes也幾乎成了時下開發工程師和運維工程師必備的技能之一。 一、主機環境預
國內環境Kubernetes v1.12.1的安裝與配置
一、些重要概念 Cluster:計算、儲存、網路資源的總和。Kubernetes的各種基於容器的應用都是執行在這些資源上的。 Master:Kubernetes的大腦,負責排程各種計算資源。Master可以是物理機或虛擬機器,多個Master可以同時執行,並實現HA。Master
《Kubernetes權威指南第2版》學習(二)一個簡單的例子
stop 輸入 rtu gist 用戶名 server 遠程 dock netstat 1: 安裝VirtualBox, 並下載CentOS-7-x86_64-DVD-1708.iso, 安裝centOS7,具體過程可以百度。 2:開啟centOS的SSH, 步驟如下:
Docker系列(二):通過Docker安裝使用 Kubernetes (K8s)
Docker社群版從17.12版本開始已經提供了對Kubernetes的支援。但是由於其安裝過程依賴的映象服務在國內訪問很不穩定,很多朋友都無法配置成功。我們提供了一個簡單的工具幫助大家開啟Docker社群版的Kubernetes功能。 我們需要先安裝好Docker CE的最新版,18.03 - 18.09
kubernetes v1.12.0叢集部署(二進位制方式+基於CA簽名雙向數字證書認證方式)
kubernetes 最簡單的方式是通過yum install kubernetes 直接安裝,但是預設安裝的是v5版本的kubernetes,所以不推薦使用,還有一種是在v1.4版本開始引入了的kubeadm工具一鍵部署,但是如果 沒有訪問gcr.io的網路環境的話部署過程
Docker基礎學習(二)-Docker的安裝和部署
一,在Windows中安裝 Docker 1,Docker的執行環境 (1)Linux容器技術 (2)作業系統級別的虛擬化 (3)依賴於Linux核心的Namespace和Cgroups 下面
docker入門學習(二)mysql安裝
exec password 工具 出了 mysql8 .com cal 遠程連接 加密 一、下載mysql鏡像 docker pull mysql 二、啟動mysql無效 [root@localhost ~]# docker run --name
爬蟲庫之BeautifulSoup學習(二)
不必要 baidu html left 官方 blank 正則 文本處理 比較 BeautifulSoup官方介紹文檔:https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html 四大對象種
cocos2dx 3.1從零學習(二)——菜單、場景切換、場景傳值
天空 ptr select 特效 new 要點 綁定 使用 water 回想一下上一篇的內容,我們已經學會了創建一個新的場景scene,加入sprite和label到層中。掌握了定時事件schedule。我們能夠順利的寫出打飛機的主場景框架。 上一篇的內容我練習了七個新
redis學習(二)——String數據類型
字符串類型 創建 復雜度 back nbsp 命令 時間復雜度 value con 一、概述 字符串類型是Redis中最為基礎的數據存儲類型,它在Redis中是二進制安全的,這便意味著該類型可以接受任何格式的數據,如JPEG圖像數據或Json對象描述信息等。在R
Linux 網卡驅動學習(二)(網絡驅動接口小結)
-a key 頻率 網絡 上網 ren 網絡設備 ews 入口 【摘要】前文我們分析了一個虛擬硬件的網絡驅動樣例。從中我們看到了網絡設備的一些接口。事實上網絡設備驅動和塊設備驅動的功能比較相似,都是發送和接收數據包(數據請求)。當然它們實際是有非常多不同
ext2文件系統學習(二)—— 目錄磁盤結構
echo free 文件格式 htm file 目錄結構 bitmap 點號 name 創建鏡像、mount等操作和上一篇一樣,測試目錄結構如下: 一些文件系統信息如下: Block size: 1024 Inodes per group: 1
Docker入門(二)
docker安裝 docker基礎命令 一、Docker相關概念1.Docker: namespace,cgroup: 解決方案: lxc,openvz lxc:linux containers docker最初就是lxc的封裝版本。 docker engine/docker server:輸
RabbitMQ學習(二)工作隊列
lose borde 阻塞 lpad mes getc actor 使用 處理 1.工作隊列(Work Queue)又叫任務隊列(Task Queue)指將任務分發個多個消費者。 2.實際操作: 這裏使用一個生產者產生多條數據提供給3個消費者
JAVA學習(二) String使用equals方法和==分別比較的是什麽?(轉)
找到 基礎上 stirng print 大小 obj lis 分配 ret String使用的equals方法和==的區別 equals方法和==的區別 首先大家知道,String既可以作為一個對象來使用,又可以作為一個基本類型來使用。這裏指的作為一個基本類型來使用只是