部署Kubernetes cluster

2018年7月19日15:21:53 發(fā)表評論 9,666 ℃

1、準備工作,三臺linux系統(tǒng)虛擬機。

master(192.168.159.160)、node1(192.168.159.161)、node2(192.168.159.162)。

版本:centos7.3,docker1.13,kubenetes1.11.0

2、所有節(jié)點安裝docker。

安裝docker1.13版本,添加阿里云centos7鏡像源即可(所有節(jié)點執(zhí)行)

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

yum install -y docker

systemctl enable docker && systemctl start docker

添加國內(nèi)鏡像加速

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

{

 "registry-mirrors": ["https://uf3mgws6.mirror.aliyuncs.com"]

}

EOF

如果需要安裝docker ce版本參考https://yq.aliyun.com/articles/110806添加鏡像源

注意:kubernetes1.11.0只兼容docker-ce-17.03以及以下版本,yum安裝docker-ce-17.03,需要先手動安裝 yum install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-selinux-17.03.0.ce-1.el7.centos.noarch.rpm

3、關(guān)閉selinux,防火墻、虛擬內(nèi)存(所有節(jié)點執(zhí)行)

setenforce 0

修改/etc/selinux/config將SELINUX=enforcing改為SELINUX=disabled

systemctl stop firewalld

systemctl disable firewalld

swapoff -a # 關(guān)閉Swap,機器重啟后不生效

注釋/etc/fstab中swap的掛載永久關(guān)閉Swap

4、RHEL / CentOS 7上的一些用戶報告了由于iptables被繞過而導(dǎo)致流量路由不正確的問題。您應(yīng)該確保 net.bridge.bridge-nf-call-iptables在sysctl配置中設(shè)置為1(所有節(jié)點執(zhí)行)

cat <<EOF > /etc/sysctl.d/k8s.conf

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

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

EOF

sysctl --system

5、添加kubernetes國內(nèi)源(所有節(jié)點執(zhí)行)

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

6、所有節(jié)點安裝kubelet、kubeadm和kubectl(所有節(jié)點安裝)

kubeadm:引導(dǎo)群集的命令。

kubelet:在群集中的所有計算機上運行的組件,并執(zhí)行諸如啟動pod和容器之類的操作。

kubectl:命令行util與您的群集通信。

yum install -y kubelet kubeadm kubectl 

systemctl enable kubelet && systemctl start kubelet

7、配置主節(jié)點上的kubelet使用的cgroup驅(qū)動程序

docker info | grep -i cgroup

cat /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

如果Docker cgroup驅(qū)動程序和kubelet配置不匹配,請更改kubelet配置以匹配Docker cgroup驅(qū)動程序cgroup-driver=systemd|cgroupfs

kubenetes1.11.0版本和docker1.13(yum安裝)默認都是systemd,不需要做任何修改。

8、用kubeadm初始化Master

報錯: [ERROR FileContent--proc-sys-net-ipv4-ip_forward]: /proc/sys/net/ipv4/ip_forward contents are not set to 1

解決辦法:echo 1 > /proc/sys/net/ipv4/ip_forward

報錯:[WARNING Firewalld]: firewalld is active, please ensure ports [6443 10250] are open or your cluster may not function correctly

解決辦法:關(guān)閉防火墻,或者放開6443和10250端口

報錯:unable to get URL "https://dl.k8s.io/release/stable-1.11.txt": Get https://storage.useso.com/kubernetes-release/release/stable-1.11.txt: read tcp 192.168.159.148:60194->216.58.199.16:443: read: connection reset by peer

解決辦法:添加--kubernetes-version=1.11.0

報錯:[WARNING Hostname]: hostname "master" could not be reached

解決辦法:echo "127.0.0.1 master" >> /etc/hosts

報錯:[WARNING Swap]: running with swap on is not supported. Please disable swap

解決辦法:

# 關(guān)閉Swap,機器重啟后不生效swapoff -a

# 修改/etc/fstab永久關(guān)閉Swap

重置kubeadm安裝狀態(tài):kubeadm reset

kubeadm init --kubernetes-version=1.11.0 --apiserver-advertise-address=192.168.159.160 --pod-network-cidr=10.244.0.0/16

注意:執(zhí)行之前提前pull鏡像(可以腳本pull),并docker tag 更改鏡像名稱。(k8s.gcr.io/pause-amd64 需要改成k8s.gcr.io/pause,其他按照默認名稱即可,不知道鏡像名稱可以kubeadm init 會自動到google下載鏡像,等到失敗可以查看)


9、新建普通用戶

useradd k8s && echo "password" | passwd --stdin k8s

su - k8s

mkdir -p $HOME/.kube

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

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

添加自動補全功能

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

10、安裝pod網(wǎng)絡(luò)

mkdir -p /etc/cni/net.d/

docker pull quay.io/coreos/flannel:v0.10.0-amd64

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.10.0/Documentation/kube-flannel.yml (在master切換 普通用戶執(zhí)行)

11、添加節(jié)點node1和node2

分別在node1和node2節(jié)點執(zhí)行

kubeadm join 192.168.159.160:6443 --token 1t0syj.oih1kgks8llwfatu --discovery-token-ca-cert-hash sha256:80ae046b8b3952e40510b2a84256795eb00cfc3e4e11c6597ff9e40fb4c5d63e

注意:如果token和CA-hash之前執(zhí)行kubeadm init 成功信息沒有保存,可以執(zhí)行

kubeadm token create --print-join-command重新生成token,或者使用kubeadm token list 查看之前的token(無法查看ca-hash)

查看節(jié)點狀態(tài)kubectl get nodes (在master切換 普通用戶執(zhí)行)

部署Kubernetes cluster

節(jié)點狀態(tài)NotReady,是因為每個節(jié)點都需要啟動若干組件,這些組件都在pod中運行。

可以執(zhí)行kubectl get pod --all-namespaces 查看pod狀態(tài)

部署Kubernetes cluster

非Running狀態(tài)需要查看具體原因,使用kubectl describe pod <pod name>

[k8s@master ~]$ kubectl describe pod coredns-78fcdf6894-ccjs8 --namespace=kube-system

部署Kubernetes cluster

Warning FailedCreatePodSandBox 1h        kubelet, master Failed create pod sandbox: rpc error: code = Unknown desc = failed to set up sandbox js8": NetworkPlugin cni failed to set up pod "coredns-78fcdf6894-ccjs8_kube-system" network: open /run/flannel/subnet.env: no such file or directory

此報錯因為此文件不存在,可以執(zhí)行

cat <<EOF> /run/flannel/subnet.env

FLANNEL_NETWORK=10.244.0.0/16

FLANNEL_SUBNET=10.244.1.0/24

FLANNEL_MTU=1450

FLANNEL_IPMASQ=true

EOF

[k8s@master ~]$ kubectl describe pod kube-proxy-9np7v --namespace=kube-system

 Warning FailedCreatePodSandBox 1h (x18 over 1h)    kubelet, node1 Failed create pod sandbox: rpc error: code = Unknown desc = failed pulling image "k8s.gcr.io/pause:3.1": Get https://k8s.gcr.io/v1/_ping: dial tcp 108.177.125.82:443: getsockopt: connection refused

此報錯是因為node1節(jié)點pull國外鏡像失敗,手動pull即可。

[root@node1 ~]# docker pull registry.cn-shenzhen.aliyuncs.com/cookcodeblog/pause:3.1

[root@node1 ~]# docker tag registry.cn-shenzhen.aliyuncs.com/cookcodeblog/pause:3.1 k8s.gcr.io/pause:3.1

[root@node1 ~]# docker rmi registry.cn-shenzhen.aliyuncs.com/cookcodeblog/pause:3.1

[root@node1 ~]# docker pull registry.cn-shenzhen.aliyuncs.com/cookcodeblog/kube-proxy-amd64:v1.11.0

[root@node2 ~]# docker tag registry.cn-shenzhen.aliyuncs.com/cookcodeblog/kube-proxy-amd64:v1.11.0 k8s.gcr.io/kube-proxy-amd64:v1.11.0

[root@node2 ~]# docker rmi registry.cn-shenzhen.aliyuncs.com/cookcodeblog/kube-proxy-amd64:v1.11.0

節(jié)點node2也執(zhí)行上面命令

[k8s@master ~]$ kubectl describe pod kube-proxy-fz4c4 --namespace=kube-system

Warning FailedCreatePodSandBox 15m (x26 over 1h) kubelet, node2 Failed create pod sandbox: rpc error: code = Unknown desc = failed pulling image "k8s.gcr.io/pause:3.1": Get https://k8s.gcr.io/v1/_ping: dial tcp 64.233.188.82:443: getsockopt: connection refused

上面kube-flannel-ds-**非運行狀態(tài)是因為node1和node2還沒有pull鏡像quay.io/coreos/flannel:v0.10.0-amd64,可以等docker自己pull或者手動pull

最終node1和node2節(jié)點如下:

部署Kubernetes cluster

master節(jié)點如下:

部署Kubernetes cluster

到此,Kubernetes Cluster創(chuàng)建成功。

【騰訊云】云服務(wù)器、云數(shù)據(jù)庫、COS、CDN、短信等云產(chǎn)品特惠熱賣中

發(fā)表評論

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: