使用kubeadm安裝部署k8s V1.12.1(兩種方式)
阿新 • • 發佈:2019-02-18
規劃
預計使用三個節點來完成k8s的初次體驗工作。結點規劃如下表所示。
IP | 節點角色 | 工作職責 |
---|---|---|
192.168.217.129 | master | 對外暴露API,對內提供工作流的排程和配置 |
192.168.217.130 | node1 | 承載著k8s執行的實際任務 |
192.168.217.131 | node2 | 同node1相同 |
部署前提
- 主機名稱解析,(在/etc/hosts檔案編輯相關資訊即可)
# vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
master 192.168.217.129
node1 192.168.217.130
node2 192.168.217.131
# master,node1,node2等節點的ip應按照自己的實際情況來填寫。
將上述配置檔案拷貝到叢集中的所有節點,包括master節點和node節點。
- 時間同步,(使用chrony服務實現)
各個節點的操作如下:
yum -y install chrony
vim /etc/chrony.conf
~~~
server master
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
~~~~
#註釋掉原有的server內容,把原有的時鐘同步服務設定為master結點上的時鐘同步。
- 關閉所有節點的iptables和firewalld以及selinux
iptables -F
systemctl stop firewalld
systemctl disable firewalld
配置yum倉庫
所有節點都要配倉庫
配置docker倉庫
wget -P /etc/yum.repos.d/ https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #從阿里雲獲取docker-ce的映象檔案,-P指定下載檔案存放的目錄
yum -y install docker-ce
# yum安裝docker普通版
systemctl start docker.service
#開啟docker
systemctl enable docker.service
#設定docker為開機自啟動
配置k8s倉庫
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
setenforce 0
安裝相關元件
各個結點上都安裝相關元件
yum install kubelet kubeadm kubectl
#所有服務都設定為開機自啟動
systemctl enable kubelet
結點的初始化與叢集的橫向擴充套件
初始化master節點
使用kubeadm配置master節點的時候,會存在拉取映象的問題,其主要原因在於相關元件的映象都在外網上,想要拉取這些映象,主要有兩種辦法。
- 在docker Unit File中的Environment中定義代理上網,這樣docker在實際拉取映象的時候,就能夠通過代理去拉取映象。
- 在本地下載好相關的映象,然後將映象打包傳到伺服器上。
在此,先使用第一種方式代理上網(需要自己想辦法到外網)
這是我經常使用的一個機場,通過我的邀請碼註冊的話,不需要驗證化學方程式:
代理上網申請
1.1 在docker Unit File中定義代理上網,通過代理上網獲取到相關映象。沒有代理的話,直接看1.2步驟即可。
vim /usr/lib/systemd/system/docker.service
#開啟docker的unit配置檔案
[Service]
~~~
Environment="HTTP_PROXY=http://[proxy-addr]:[proxy-port]/" "HTTPS_PROXY=https://[proxy-addr]:[proxy-port]/"
~~~
#新增上相關代理的地址和埠
1.2 直接使用我打包好的映象。
1.1或者1.2執行一個即可
rz -be
# 上傳映象到相關節點上。
docker load -i k8s_master.tar
#master節點上執行,獲取master需要用到的映象
docker image ls
#檢視所需映象是否都已經匯入
REPOSITORY TAG IMAGE ID CREATED SIZE
k8s.gcr.io/kube-proxy v1.12.1 61afff57f010 3 weeks ago 96.6MB
k8s.gcr.io/kube-scheduler v1.12.1 d773ad20fd80 3 weeks ago 58.3MB
k8s.gcr.io/kube-controller-manager v1.12.1 aa2dd57c7329 3 weeks ago 164MB
k8s.gcr.io/kube-apiserver v1.12.1 dcb029b5e3ad 3 weeks ago 194MB
k8s.gcr.io/etcd 3.2.24 3cab8e1b9802 5 weeks ago 220MB
k8s.gcr.io/coredns 1.2.2 367cdc8433a4 2 months ago 39.2MB
quay.io/coreos/flannel v0.10.0-amd64 f0fad859c909 9 months ago 44.6MB
k8s.gcr.io/pause 3.1 da86e6ba6ca1 10 months ago 742kB
2.禁用節點上的swap,防止將來出現的意外問題。
swapoff -a
sysctl -p
vim /ets/fstab
#去除該檔案中關於swap那行。
- 開啟路由轉發功能以及iptables的過濾策略。
vim /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
#開啟iptables中ipv6的過濾規則
net.bridge.bridge-nf-call-iptables = 1
#開啟ipv4的過濾規則
net.ipv4.ip_forward = 1
#開啟伺服器的路由轉發功能
執行命令使修改生效。
modprobe br_netfilter
sysctl -p /etc/sysctl.d/k8s.conf
3.初始化master節點
kubeadm init --kubernetes-version=v1.12.1 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.217.129
#--kubernetes-version指明要下載的映象版本
#--pod-network-cidr 指明網路的子網掩碼,此處使用flannel模型的子網掩碼
#--apiserver-advertise-address 指明與master結點繫結的ip
儲存初始化後的那段話,將來新加入結點或者做別的操作的時候,可能會用到相關內容。
一定要儲存初始化後面的那段話,在你加入新節點的時候,很可能會用到,每個人都不太一樣。
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.217.129:6443 --token vtqzkt.j0u1chomafn1offd --discovery-token-ca-cert-hash sha256:c25549dc8457677752b8d1b0547acfa8be742cbd5734802b6d2e3e9a6e7e1b73
4.配置常規使用者如何使用kubectl訪問叢集
新建一個使用者k8s,並給予其sudo許可權,之後對於k8s的操作都是用這個k8s使用者。
useradd k8s
passwd k8s
# 建立使用者,並對建立的使用者設定密碼
chmod u+w /etc/sudoers
vim /etc/sudoers
#找到 root ALL這一行
#複製貼上這行內容,同時將名字修改為k8s即可
chmod u-w /etc/sudoers
切換到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
5.配置命令補全功能
echo "source <(kubectl completion bash)" >> ~/.bashrc
6.配置flannel網路功能
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 下載flannel的yaml檔案
kubectl apply -f kube-flannel.yml
# 執行這個檔案生成flannel的pods
新增一個新的節點到叢集
1.永久關閉掉swap。
swapoff -a
vim /etc/fstab
# 刪除掉檔案中關於swap的一行
2.1 配置docker代理上網,以便拉取映象。沒有代理的話,通過2.2使用我打包好的映象。
vim /usr/lib/systemd/system/docker.service
#開啟docker的unit配置檔案
[Service]
~~~
Environment="HTTP_PROXY=http://[proxy-addr]:[proxy-port]/" "HTTPS_PROXY=https://[proxy-addr]:[proxy-port]/"
~~~
#新增上相關代理的地址和埠
2.2 ,如果沒有代理的話,匯入打包好的映象。
rz -be
# 將pc上的tar檔案上傳到相關節點上。
docker load -i k8s_ndoe.tar
#node節點上執行,獲取node需要用到的映象
docker image ls
#檢視所需映象是否都已經匯入
REPOSITORY TAG IMAGE ID CREATED SIZE
k8s.gcr.io/kube-proxy v1.12.1 61afff57f010 3 weeks ago 96.6MB
quay.io/coreos/flannel v0.10.0-amd64 f0fad859c909 9 months ago 44.6MB
k8s.gcr.io/pause 3.1 da86e6ba6ca1 10 months ago 742kB
3.開啟路由轉發功能以及iptables的過濾策略。
vim /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
#開啟iptables中ipv6的過濾規則
net.bridge.bridge-nf-call-iptables = 1
#開啟ipv4的過濾規則
net.ipv4.ip_forward = 1
#開啟伺服器的路由轉發功能
執行命令使修改生效。
modprobe br_netfilter
sysctl -p /etc/sysctl.d/k8s.conf
4.執行加入節點的命令
kubeadm join 192.168.217.129:6443 --token vtqzkt.j0u1chomafn1offd --discovery-token-ca-cert-hash sha256:c25549dc8457677752b8d1b0547acfa8be742cbd5734802b6d2e3e9a6e7e1b73
5.在mster結點上執行命令檢視結果
kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready master 171m v1.12.1
node1 Ready <none> 11m v1.12.1
#得到這樣的結果說明已經能夠成功使用了
小結
尚有兩個問題沒有解決。
- 1.目前的叢集中使用的是iptables進行負載均衡,實際上可以使用效能更好的ipvs,有待後面研究。
- 2.叢集中現在的網路是flannel,後面考慮如何平穩的過渡為calico網路模型。