使用kubeadm安裝部署kubernetes集群:
前提:
1、各節點時間同步;
2、各節點主機名稱解析:dns OR hosts;
3、各節點iptables及firewalld服務被disable;
一、設置主節點安裝程序包
1、生成yum倉庫配置:
主管理節點上的yum倉庫的配置:
先配置安裝docker倉庫:
[docker]
name=docker
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/
gpgcheck=0
[extras]
name=extras
baseurl=http://vault.centos.org/7.4.1708/extras/x86_64/
gpgcheck=0
配置kubernetes的倉庫配置文件:
[kubernetes]
name=kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=0
將主節點上配置的yum倉庫復制到其他的兩個節點上:nod01;nod02
2、安裝相關的程序包 :
yum install docker-ce kubelet kubeadm kubectl? (生產中建議使用docker-ce的17.3的版本)
vim /usr/lib/systemd/system/docker.service? (修改docker的配置文件)
Environment=”HTTPS_PROXY=http://www.ik8s.io:10080″ Environment=”NO_PROXY=127.0.0.0/8,172.20.0.0/16″
(對訪問到國外的鏡像網站做代理,如果從本地下載的鏡像則不做代理:添加在12行)
systemctl daemon-reload ? (重新加載配置文件)
systemctl start docker? (開啟docker服務)
systemctl enable docker? (設為開機自啟動模式)
docker info ? (查看定義的信息是否生效)
cat /proc/sys/net/bridge/bridge-nf-call-iptables? (查看本機的的此值是否為1)
cat /proc/sys/net/bridge/bridge-nf-call-ip6tables (查看本機的的此值是否為1)
(如果值不為1,要改為1)
systemctl enable kubelet? (將kubelet設為開機自啟動)
初始化master節點:
vim /etc/sysconfig/kubelet(修改配置文件)
KUBELET_EXTRA_ARGS=”–fail-swap-on=false” (忽略swap的報錯)
# kubeadm init –kubernetes-version=v1.11.1 –pod-network-cidr=10.244.0.0/16 service-cidr=10.96.0.0/12 –ignore-preflight-errors=Swap? (此選項可以通過kubeadm init –help)
(–kubernetes-version=v1.11.1:指定版本號不指定也可以通過查看help幫助有默認的版本)
(–pod-network-cidr=10.244.0.0/16? :指定pod的網絡地址)
(service-cidr=10.96.0.0/12? :指定service得 網絡地址,也可通過查看help幫助里有定義 )
(–ignore-preflight-errors=Swap? :忽略Swap信息)
裝好之后將最后一行復制下來備用:
kubeadm join 172.20.49.2:6443 –token h1jv8k.9mjlazp98lx3u9xl –discovery-token-ca-cert-hash sha256:56a94c74f003b7cbe1bcaa9d673cf605dfe8a6887024ef9f369acbe0ac2d09a2
docker image list? :查看鏡像是否下載到本地:
ss -nlt? (查看6443端口是否開啟)
mkdir -p $HOME/.kube ? (創建一個隱藏目錄)
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config (復制文件到剛創建的目錄 下)
測試:
kubectl get componentstatus? (查看組件信息)
kubectl get nodes ?? (查看集群節點的信息)
添加flannel網絡插件
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
查看本機的flannel鏡像有沒有下載下來:docker image ls
再次查看master節點已經就緒(ready)
kubectl get nodes
kubectl get pods -n kube-system
在nod01節點上:(主機點通過主機名來管理的,需要將從節點點的主機名設置為不同的名稱)
yum install docker-ce kubelet kubeadm ? (安裝包)
scp /usr/lib/systemd/system/docker.service 192.168.60.20:/usr/lib/systemd/system/docker.service
scp /etc/sysconfig/kubelet 192.168.60.20:/etc/sysconfig/
(在主節點上執行;將主節點的配置文件復制到從節點上,省的再修改了)
systemctl start docker? (啟動服務)
systemctl enable docker kubelet? (設置為開機自啟)
docker info (查看復制過來的配置文件是否生效)
kubeadm join 172.20.49.2:6443 –token h1jv8k.9mjlazp98lx3u9xl –discovery-token-ca-cert-hash sha256:56a94c74f003b7cbe1bcaa9d673cf605dfe8a6887024ef9f369acbe0ac2d09a2 –ignore-preflight-errors=Swap ?? (將從節點加入到主節點上去,上面的內容來自主節點剛剛保存下來備用的)
docker image ls ? (查看本節點的鏡像下載內容)
kubectl get nodes ? (在主節點上執行此條命令,查看自己是否加入到主節點的管理中)
nod02的加入方式和nod01的添加方式相同。
K8S的工作架構:?
在K8S里pod為最小的模塊:pod是同一種應用的多個容器的組合,靠控制器來管理,如果定義了某個pod里有三個httpd程序的容器,如果某個容器宕機了,控制器會將其刪掉再次新建一個。
控制器又需要控制器管理器來管理,來防止控制器服務的不可用。
service:由于pod里的容器會隨時創建或者刪除,其地址不是固定的,如果需要訪問pod里的容器,會變得很困難,service是將pod里容器的IP地址變成固定可訪問的地址,當外部客戶端訪問pod容器時,經過service的調度轉發給內部的pod里的容器。service,只是iptables的一條規則或者ipvs的一條規則,不存在于任何虛擬的IP網卡和物理網卡之上。
service是如何將外部的訪問發送給pod里的容器,(容器的IP地址經常變動)
service不是通過IP地址來聯通pod里的容器的,而是通過應用的標簽名稱,來聯通的。K8S內部有虛擬的DNS服務器。將pod里的容器名稱標簽和其IP地址對應上,如果刪除或者新建一個容器,DNS記錄會自動添加一條A記錄的。
K8S的網絡架構:
8KKDMNCKNVFN ?
K8S內部有三層的虛擬網絡:容器的虛擬網絡;pod的虛擬網絡;service的虛擬網絡。
pod內部的容器是可以相互通信的用的相同的網絡名稱空間。
pod和pod的通信,如果在同一個物理節點上則通過pod網絡來通信。如果不在同一個物理節點上則需要通過service層的網絡來轉發代理。
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/104669