1 準備工作
服務(wù)器
| 名稱 | IP | 用途 |
|---|---|---|
| master01 | 192.168.0.40 | k8smaster節(jié)點 |
| node01 | 192.168.0.41 | node工作節(jié)點 |
| node02 | 192.168.0.42 | node工作節(jié)點 |
服務(wù)器建議關(guān)閉swap交換分區(qū)。為了讓容器讀取文件系統(tǒng),需要關(guān)閉SELinux。master和各node之間要相互通訊,由于端口較多,為了簡便起見,這里關(guān)閉了防火墻(生成環(huán)境下,根據(jù)事情情況開啟對應(yīng)的端口即可)。開啟iptables對L2網(wǎng)橋的處理。
kubeadm與二進制安裝的區(qū)別
在使用二進制安裝k8s時,需要在master節(jié)點上安裝:
- kube-apiserver,以rest風格向外提供服務(wù)(如,管理資源),是集群控制的入口。
- kube-scheduler,負責資源調(diào)度
- kube-controller-manager,負責所有資源的自動化控制
- etcd,集群的主數(shù)據(jù)庫
在node節(jié)點上需要安裝:
- kubelet,負責pod的管理,向master注冊,匯報自身情況
- kube-proxy,通訊與負載均衡的組件
- docker,容器引擎
這是都是屬于服務(wù)器進程,他的安裝配置過程非常復雜。
kubeadm是k8s官方提供的安裝部署工具,簡化了k8s安裝過程。它與二進制安裝不同的地方是,
- kubeadm是基于容器的,也就是說,在master上的所有組件就是運行在容器中,所以master上也需要安裝docker容器引擎。
- 因為master上的組件要基于容器運行,所以需要在master上也安裝kubelet,即所有節(jié)點都需要安裝kubelet。
k8s網(wǎng)絡(luò)說明
在k8s中有3種不同的網(wǎng)絡(luò)
- Node IP,節(jié)點(服務(wù)器)的物理ip,由供應(yīng)商提供(如IPS運營商),這個的192.168.0.40就是node ip。
- Pod IP,docker分配給每個容器的ip,因為pod可能運行在不同的節(jié)點上,所以需要一種網(wǎng)絡(luò)附件來統(tǒng)一處理pod網(wǎng)絡(luò),這里我們采用flannel。
- Cluster IP,service ip這個和k8s資源對象service相關(guān),是由k8s分配的
步驟簡要說明
- 在master和node上安裝 docker、kubelet、kubeadm,其中,在master上安裝還需要安裝kubectl命令行工具。
- 在master上kubeadm init
- 在node上kubeadm join
2 配置服務(wù)器環(huán)境
關(guān)閉防火墻(生產(chǎn)環(huán)境不要關(guān)閉防火墻,開啟對應(yīng)的端口即可)
systemctl stop firewalld && systemctl disable firewalld
關(guān)閉swap分區(qū)
swapoff -a
#編輯fstab配置文件,注釋swap分區(qū)一行
vim /etc/fstab
#/dev/mapper/centos-swap swap swap defaults 0 0
關(guān)閉SELinux
setenforce 0
# 編輯selinux配置文件,設(shè)為disable
vim /etc/selinux/config
SELINUX=disabled
開啟iptables的L2網(wǎng)橋處理
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
EOF
#刷新參數(shù)
sysctl --system
設(shè)置yum源為阿里的鏡像
cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all
yum makecache
設(shè)置服務(wù)器名稱(根據(jù)需要設(shè)置),以master01為例,node01和node02同理
hostnamectl set-hostname master01
3 安裝Dokcer
參考Docker官網(wǎng)安裝文檔:
安裝必要的包,yum-utils提供了yum-config-manager功能。docker使用的devicemapper存儲引擎device-mapper-persistent-data和lvm2兩個包。
yum install -y yum-utils device-mapper-persistent-data lvm2
設(shè)置docker的repo
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
安裝docker
yum install docker-ce docker-ce-cli containerd.io
配置docker的倉庫鏡像,這里設(shè)置的是網(wǎng)頁的鏡像
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors" : ["http://hub-mirror.c.163.com"]
}
EOF
啟動docker,并設(shè)置為開機自動啟動
systemctl start docker && systemctl enable docker
查看docker是否運行成功
docker version
4 安裝Master節(jié)點
配置kubernetes的yum源,這里設(shè)置為阿里的yum源
cat > /etc/yum.repos.d/kubernetes.repo <<EOF
[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
安裝kubeadm、kubelet和kubectl
yum install kubeadm kubelet kubectl
設(shè)置kubelet開機自起
systemctl enable kubelet
這里我們先將k8s所需組件的鏡像下載到本地,由于鏡像的地址默認在k8s.gcr.io上,國內(nèi)無法下載,所以使用阿里的倉庫鏡像(registry.aliyuncs.com/google_containers)下載
kubeadm config images pull --image-repository=registry.aliyuncs.com/google_containers
完成后可以看到docker中的鏡像
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry.aliyuncs.com/google_containers/kube-proxy v1.17.3 ae853e93800d 3 weeks ago 116MB
registry.aliyuncs.com/google_containers/kube-apiserver v1.17.3 90d27391b780 3 weeks ago 171MB
registry.aliyuncs.com/google_containers/kube-controller-manager v1.17.3 b0f1517c1f4b 3 weeks ago 161MB
registry.aliyuncs.com/google_containers/kube-scheduler v1.17.3 d109c0821a2b 3 weeks ago 94.4MB
registry.aliyuncs.com/google_containers/coredns 1.6.5 70f311871ae1 4 months ago 41.6MB
registry.aliyuncs.com/google_containers/etcd 3.4.3-0 303ce5db0e90 4 months ago 288MB
registry.aliyuncs.com/google_containers/pause 3.1 da86e6ba6ca1 2 years ago 742kB
初始化node節(jié)點,在init參數(shù)中,--image-repository是上面我們pull的倉庫地址,--kubernetes-version為k8s的版本,有了這兩個參數(shù),kubeadm會從本地的鏡像去生成容器。
--service-cidr指定集群的網(wǎng)絡(luò)
--pod-network-cidr指定pod的網(wǎng)絡(luò)
kubeadm init \
--image-repository=registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.17.3 \
--service-cidr=192.168.20.0/16 \
--pod-network-cidr=10.244.0.0/16
...
Your Kubernetes control-plane 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/
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.0.40:6443 --token s3bqaf.59ox0voe4c0zf4um \
--discovery-token-ca-cert-hash sha256:094be673ed29065b86751b2557f4e036c64427a56331e36e00490c02648d6e95
將kubeadm join 192.168.0.40:6443 --token s3bqaf.59ox0voe4c0zf4um \ --discovery-token-ca-cert-hash sha256:094be673ed29065b86751b2557f4e036c64427a56331e36e00490c02648d6e95保存,這個用于node加入master。
配置kubectl環(huán)境
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
查看kubectl 是否可以使用
kubectl get nodes
NAME STATUS ROLES AGE VERSION
master01 NotReady master 2m44s v1.17.3
配置網(wǎng)絡(luò)
這里我們使用flannel作為k8s的網(wǎng)絡(luò)插件
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
運行后上面的命令后,使用docker images查看是否下載flannel鏡像,當鏡像下載完成后,執(zhí)行
kubectl get nodes
NAME STATUS ROLES AGE VERSION
master01 Ready master 10m v1.17.3
可以看到STATUS一欄顯示為Ready,表示master節(jié)點安裝成功。
5 安裝Node節(jié)點
在node節(jié)點(192.168.0.41和192.168.0.42)上,配置kubenetes的yum源與上一節(jié)相似,不再累述。這里注意,node節(jié)點上不需要安裝kubectl工具。
yum install kubelet kubeadm
使用上面master安裝后的命令,將該節(jié)點加入到k8s集群中
kubeadm join 192.168.0.40:6443 --token s3bqaf.59ox0voe4c0zf4um \
--discovery-token-ca-cert-hash sha256:094be673ed29065b86751b2557f4e036c64427a56331e36e00490c02648d6e95
token是有有效期的,如果token過期,可以在master節(jié)點使用kubeadm token create,重新生成token,替換上面的token選項的內(nèi)容
6 查看各節(jié)點
在master節(jié)點上
kubectl get nodes
NAME STATUS ROLES AGE VERSION
master01 Ready master 35m v1.17.3
node02 Ready <none> 13m v1.17.3
可以看到節(jié)點已準備就緒