日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

最近在學習K8s的知識,從最原始的安裝k8s集群開始。上一篇文章已經介紹了在VirtualBox下安裝虛擬機和如何分配k8s集群的IP地址,這一章主要介紹在虛擬機上安裝k8s的兩種方法。

如何安裝,遇到問題如何解決,在網上的一搜就大把資源,包括k8s官網,但是很多時候都不能解決問題,因為k8s的版本很多,從1.5.2到最新的1.18.6,安裝的linux系統有Ubuntu,centos,Fedroa的等等,各種平臺的問題不一樣,解決方法也很多。

筆者經過一段時間的摸索,經過實踐,總結出兩種安裝k8s集群的方法,供大家參考。

使用kubernetes-master和kubernetes-node的安裝方法,簡單便捷,缺點是安裝的版本比較低,不是最新的,比如1.5.2。使用Docker鏡像,安裝和運行包括etcd,flannel,pause,kube-apiserver,controller-manager,scheduler等方法。能使用最新的,穩定的版本,比如1.18.6。

這兩種方法都是選擇CentOS7操作系統,原因有:

1.CentOS7和Fedora32穩定,可提供安裝的軟件穩定而且豐富。

2.CentOS8,Fedoar33經過嘗試,k8s目前上沒有穩定的安裝包。

3.Ubuntu,對于承載集群服務,還是比不上CentOS。

k8s集群IP地址分配

可以參考筆者上一篇文章。

準備至少兩個節點,一個是master,一個是node。在VirtualBox上安裝CentOS7之后,分配幾個IP地址:一個是Host-Only類型的IP地址,192.168.56.xx,這個是用來從host主機登陸到節點的地址;另外一個是internal network類型的IP地址,10.0.20.101,是用來配置k8s節點之間服務通信的地址。當然還有其他兩類IP地址,比如NAT和Bridge地址,NAT地址對于所有VirtualBox的機器來說都是一個固定的地址10.0.2.15,不能用來配置k8s集群;Bridge地址隨著接入網絡(無線wifi,有線光線等)地址都不是固定的,所以最好不要用來配置k8s使用。

第一種安裝k8s的方法:

使用kubernetes-master和kubernetes-node安裝包,k8s的基礎軟件直接安裝到虛擬機運行。但是目前只有1.5.2的版本安裝是比較順利的。最新的1.18.6與1.5.2比較的差別還是挺大的,不管從配置,使用都是有挺大的區別,筆者并不建議使用1.5的版本使用,用來學習的話,還是可以的。

k8s集群IP地址

主機名字 Host-Only地址 Internal Network地址

k8smaster 192.168.56.101 10.0.20.101

k8snode1 192.168.56.102 10.0.20.102

k8snode2 192.168.56.103 10.0.20.103

步驟一:系統基本配置

master和node節點都需要執行。

安裝epel-release源

# yum -y install epel-release

所有機器關閉防火墻

# systemctl stop firewalld

# systemctl disable firewalld

# setenforce 0

步驟二:master節點安裝配置

使用yum安裝etcd、kubernetes-master

# yum -y install etcd kubernetes-master

配置文件vim /etc/etcd/etcd.conf

#[Member]

ETCD_DATA_DIR="/var/lib/etcd/default.etcd"

ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"

ETCD_NAME="default"

#[Clustering]

ETCD_ADVERTISE_CLIENT_URLS="http://192.168.56.101:2379"

配置文件vim /etc/kubernetes/apiserver

KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"

KUBE_API_PORT="--port=8080"

KUBELET_PORT="--kubelet-port=10250"

KUBE_ETCD_SERVERS="--etcd-servers=http://127.0.0.1:2379"

KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"

KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota"

KUBE_API_ARGS=""

在etcd中定義flannel網絡插件,以便k8s節點之間通信

# etcdctl mk /atomic.io/network/config '{"Network":"172.17.0.0/16"}'

啟動etcd、kube-apiserver、kube-controller-manager、kube-scheduler并配置開機啟動服務。

# for SERVICES in etcd kube-apiserver kube-controller-manager kube-scheduler; do systemctl restart $SERVICES; done

# for SERVICES in etcd kube-apiserver kube-controller-manager kube-scheduler; systemctl enable $SERVICES; done

步驟三:node節點安裝配置

# yum -y install flannel kubernetes-node

配置文件vim /etc/sysconfig/flanneld

FLANNEL_ETCD_ENDPOINTS="http://192.168.56.101:2379"

FLANNEL_ETCD_PREFIX="/atomic.io/network"

配置文件vim /etc/kubernetes/config

KUBE_LOGTOSTDERR="--logtostderr=true"

KUBE_LOG_LEVEL="--v=0"

KUBE_ALLOW_PRIV="--allow-privileged=false"

KUBE_MASTER="--master=http://192.168.56.101:8080"

配置文件vim /etc/kubernetes/kubelet

KUBELET_ADDRESS="--address=0.0.0.0"

KUBELET_PORT="--port=10250"

KUBELET_HOSTNAME="--hostname-override=192.168.56.102"

KUBELET_API_SERVER="--api-servers=http://192.168.56.101:8080"

KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"

KUBELET_ARGS=""

啟動kube-proxy,kubelet,docker,flanneld服務,并且配置開機啟動服務。

# for SERVICES in kube-proxy kubelet docker flanneld;do systemctl restart $SERVICES; done

# for SERVICES in kube-proxy kubelet docker flanneld;do systemctl enable $SERVICES; done

到此,master和node節點全部配置完畢,在master上執行:

# kubectl get nodes

NAME STATUS AGE

192.168.56.102 Ready 21d

192.168.56.103 Ready 20d

# kubectl get cs

NAME STATUS MESSAGE ERROR

controller-manager Healthy ok

scheduler Healthy ok

etcd-0 Healthy {"health":"true"}

# kubectl get namespace

NAME STATUS AGE

default Active 21d

kube-system Active 21d

# kubectl version

Client Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.2"}

Server Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.2"}

# kubectl api-versions

Apps/v1beta1

authentication.k8s.io/v1beta1

authorization.k8s.io/v1beta1

autoscaling/v1

batch/v1

certificates.k8s.io/v1alpha1

extensions/v1beta1

policy/v1beta1

rbac.authorization.k8s.io/v1alpha1

storage.k8s.io/v1beta1

v1

第二種安裝k8s的方法:

使用docker鏡像安裝,k8s的基礎軟件在docker容器中運行。支持最新的1.18.6的版本。

k8s集群IP地址

主機名字 Host-Only地址 Internal Network地址

k8smaster 192.168.56.110 10.0.20.110

k8snode1 192.168.56.111 10.0.20.111

步驟一:添加主機名字

# hostnamectl set-hostname master-node

# cat <<EOF>> /etc/hosts

10.0.20.110 k8smaster

10.0.20.111 k8snode1

EOF

步驟二:設置selinux和防火墻

# setenforce 0

# sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinu

# modprobe br_netfilter

# echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables

# systemctl disable firewalld

# swapoff -a

# reboot

步驟三:設置k8s repo來源

# 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=0

repo_gpgcheck=0

EOF

步驟四:安裝docker和kube軟件

# yum install kubeadm docker -y

注意docker需用使用docker-ce版本

# systemctl enable kubelet

# systemctl start kubelet

# systemctl enable docker

# systemctl start docker

步驟五:下載docker鏡像(master和node節點都要安裝)

由于國內訪問k8s.gcr.io的地址非常慢,所以需要手動下載docker的image,具體什么版本1.需要跟k8s的版本一致;2.需用從https://hub.docker.com/u/library查詢。筆者整理好下面的命令:

# docker pull kubesphere/kube-apiserver:v1.18.6

# docker pull kubesphere/kube-controller-manager:v1.18.6

# docker pull kubesphere/kube-scheduler:v1.18.6

# docker pull kubesphere/kube-proxy:v1.18.6

# docker pull kubesphere/pause:3.2

# docker pull kubesphere/flannel:v0.12.0

# docker pull coreDNS/coredns:1.6.7

# docker pull azhu/etcd:3.4.3-0

下載完畢之后需要修改image的tag,讓k8s認為本地的tag就是他需要安裝的版本:

# docker tag docker.io/kubesphere/kube-proxy:v1.18.6 k8s.gcr.io/kube-proxy:v1.18.6

# docker tag docker.io/kubesphere/kube-apiserver:v1.18.6 k8s.gcr.io/kube-apiserver:v1.18.6

# docker tag docker.io/kubesphere/kube-controller-manager:v1.18.6 k8s.gcr.io/kube-controller-manager:v1.18.6

# docker tag docker.io/kubesphere/kube-scheduler:v1.18.6 k8s.gcr.io/kube-scheduler:v1.18.6

# docker tag docker.io/kubesphere/pause:3.2 k8s.gcr.io/pause:3.2

# docker tag docker.io/kubesphere/flannel:v0.12.0 k8s.gcr.io/flannel:v0.12.0

# docker tag docker.io/coredns/coredns:1.6.7 k8s.gcr.io/coredns:1.6.7

# docker tag docker.io/azhu/etcd:3.4.3-0 k8s.gcr.io/etcd:3.4.3-0

步驟六:初始化kube

# kubeadm init --control-plane-endpoint=10.0.20.110 --apiserver-advertise-address=10.0.20.110

這里需要指定Internal Network IP地址,否則會使用默認的NAT的地址。

當初始化完成之后,會得到下面的信息:

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 control-plane nodes by copying certificate authorities

and service account keys on each node and then running the following as root:

kubeadm join 10.0.20.110:6443 --token bzy0jj.nkwctwqmroxh08zu

--discovery-token-ca-cert-hash sha256:6c0b3db060415f15c82b7f3c8948519d93708d60a46c1903c0bb11ac04ba17cf

--control-plane

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 10.0.20.110:6443 --token bzy0jj.nkwctwqmroxh08zu --discovery-token-ca-cert-hash sha256:6c0b3db060415f15c82b7f3c8948519d93708d60a46c1903c0bb11ac04ba17cf

意思是:

一要準備網絡插件,否則node的狀態不是ready的。

二是可以通過kebeadm join 加入control-plane和worker node。筆者只有一個control-plane,但是可以有多個worker node節點加入到集群。

三是需要將admin.conf copy到本用戶的配置目錄,以便使用kubectl命令時候知道服務地址。

su切換到root用戶(其實我全程都是用root操作),并而執行:

# mkdir -p $HOME/.kube

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

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

驗證一下get node命令:

# kubectl get nodes

NAME STATUS ROLES AGE VERSION

k8smaster NotReady master 33h v1.18.6

NotReady是因為網絡插件沒有安裝的原因。

配置內部通信 flannel 網絡(master和node都要配)

先配置內部通信 flannel 網絡:

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

確保kubeadm.conf中的podsubnet的地址和kube-flannel.yml中的網絡配置一樣

加載配置文件:

# kubectl apply -f kube-flannel.yml

成功之后 kubectl get nodes的狀態會變成ready。

當然網絡插件可以使用其他的,比如Weavenet插件,不過筆者試過是不太好用,還是flannel插件好用。

Weavenet插件的安裝:(不推薦)

# export kubever=$(kubectl version | base64 | tr -d 'n')

# kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$kubever"

到此,k8s的master節點已經配置完畢,接下來是配置worker node節點。

步驟七: 配置node節點

k8s worker節點的配置步驟跟master的步驟一到五都是一樣的,并而第六步的網絡插件也一樣。

在worker節點上執行:

# kubeadm join 10.0.20.110:6443 --token bzy0jj.nkwctwqmroxh08zu --discovery-token-ca-cert-hash sha256:6c0b3db060415f15c82b7f3c8948519d93708d60a46c1903c0bb11ac04ba17cf

在master上執行:

# kubectl get nodes

NAME STATUS ROLES AGE VERSION

k8smaster Ready master 34h v1.18.6

k8snode1 Ready <none> 33h v1.18.6

可以看出兩個節點的狀態都已經ready了。

使用docker ps -a | grep Up 命令分別在兩個節點上運行,可以看出啟動的k8s服務的pod:

在master上運行的pod有:kube-proxy,kube-scheduler,kube-controller-manager,kube-apiserver,etcd,flannel

在node上運行的pod有:kube-proxy,flannel

繼續查看其他狀態和數據:

# kubectl get cs

NAME STATUS MESSAGE ERROR

controller-manager Unhealthy Get http://127.0.0.1:10252/healthz: dial tcp 127.0.0.1:10252: connect: connection refused

scheduler Unhealthy Get http://127.0.0.1:10251/healthz: dial tcp 127.0.0.1:10251: connect: connection refused

etcd-0 Healthy {"health":"true"}

controller-manager和scheduler 的Unhealthy狀態,后續再跟進。估計是配置不正確導致的。

# kubectl get namespace

NAME STATUS AGE

default Active 2d9h

kube-node-lease Active 2d9h

kube-public Active 2d9h

kube-system Active 2d9h

# kubectl version

Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.6"}

Server Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.6"}

# kubectl api-versions

admissionregistration.k8s.io/v1

admissionregistration.k8s.io/v1beta1

apiextensions.k8s.io/v1

apiextensions.k8s.io/v1beta1

apiregistration.k8s.io/v1

apiregistration.k8s.io/v1beta1

apps/v1

authentication.k8s.io/v1

authentication.k8s.io/v1beta1

authorization.k8s.io/v1

authorization.k8s.io/v1beta1

autoscaling/v1

autoscaling/v2beta1

autoscaling/v2beta2

batch/v1

batch/v1beta1

certificates.k8s.io/v1beta1

coordination.k8s.io/v1

coordination.k8s.io/v1beta1

discovery.k8s.io/v1beta1

events.k8s.io/v1beta1

extensions/v1beta1

networking.k8s.io/v1

networking.k8s.io/v1beta1

node.k8s.io/v1beta1

policy/v1beta1

rbac.authorization.k8s.io/v1

rbac.authorization.k8s.io/v1beta1

scheduling.k8s.io/v1

scheduling.k8s.io/v1beta1

storage.k8s.io/v1

storage.k8s.io/v1beta1

分享到:
標簽:安裝 K8S
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定