kubernetes環境搭建 -k8s筆記(一)


一、環境准備

1、硬件及版本信息:

  cpu&內存:2核心,2G

  網絡: 每台vm主機2塊網卡,一塊NAT用於上網,別一塊配置成 "僅主機模式",網段為192.168.100.X

  OS:centos7.4

  k8s:v1.13.3

  docker: 18.09.2

2、一些初始化工作:

  關閉防火牆

  關閉SELinux

  配置ntp

  配置hosts

# /etc/hosts文件如下:每台主機都要配置
# tail -3 /etc/hosts
192.168.100.71 master.perry.com master 192.168.100.72 node1.perry.com node1 192.168.100.73 node2.perry.com node2

  關閉swap

注釋掉/etc/fstab中swap那行,並重啟主機生效
# /dev/mapper/centos-swap swap                    swap    defaults        0 0

  開啟透明網橋

# echo "net.bridge.bridge-nf-call-iptables=1" >> /etc/sysctl.conf
# echo "net.bridge.bridge-nf-call-ip6tables=1" >> /etc/sysctl.conf # systctl -p

 

3、配置docker yum倉庫

# wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

4、配置k8s yum倉庫

# cat > /etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg gpgcheck=1 enabled=1 EOF

二、安裝軟件

master和node三台主機都安裝 docker-ce kubelet kubeadm kubectl

# yum install docker-ce kubelet kubeadm kubectl

 

三、初始化master

# kubeadm init --kubernetes-version=v1.13.3 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --apiserver-advertise-address=192.168.100.71

1、參數說明:

--kubernetes-version  # 指定要安裝的k8s版本
--pod-network-cidr    # 指定pod網絡地址范圍
--service-cidr   # 指定service網絡地址范圍
--apiserver-advertise-address #指定api地址,這里配置成了master的私網接口IP

2、kubeadm init時,會因為無法訪問google,導致鏡像下載失敗,解決辦法有如下2種:

1)想辦法使用代理上google,有朋友要找到好用的代理告訴我下,^_^。

  配置docker使用代理,配置完成后,重啟docker服務

# vi /usr/lib/systemd/system/docker.service 

[Service]
……
Environment="HTTPS_PROXY=http://www.ik8s.io:10080" Environment="NO_PROXY=127.0.0.0/8,192.168.0.0/16" ……

2)根據kubeadm init執行時的報錯提示,可以獲知需要下載哪些鏡像,這些鏡像可以先從阿里雲的registry下載,下載完成后再重新打tag,具體操作如下:

[root@master scripts]# cat get_k8s_img_from_aliyun.sh
#!/bin/bash

# need get images
images=(
k8s.gcr.io/kube-apiserver:v1.13.3
k8s.gcr.io/kube-controller-manager:v1.13.3
k8s.gcr.io/kube-scheduler:v1.13.3
k8s.gcr.io/kube-proxy:v1.13.3
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.2.24
k8s.gcr.io/coredns:1.2.6
)

k8s_registry=k8s.gcr.io
aliyun_registry=registry.cn-hangzhou.aliyuncs.com

# get images from aliyun registry
function get_aliyun_k8s_images() {
for k8s_image in ${images[*]};do
image=` echo $k8s_image | awk -F '/' '{print $2}'`
docker pull $aliyun_registry/google_containers/$image
done
}

# tag images to k8s.gcr.io registry
function tag_images() {
for k8s_image in ${images[*]};do
image=` echo $k8s_image | awk -F '/' '{print $2}'`
docker tag $aliyun_registry/google_containers/$image $k8s_registry/$image
done
}

get_aliyun_k8s_images
tag_images

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

kubeadm init 初始化成功后,可以看到如下信息:

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.100.71:6443 --token rfhs54.1i7ol2gt68pmnsl6 --discovery-token-ca-cert-hash sha256:75e6507e0cd820fae522348f40c9a6fd7318e5ebf34829cebafdec0acc368749

 

四、將node節點加入k8s集群中

node節點需要以下三個鏡像

k8s.gcr.io/kube-proxy:v1.13.3
k8s.gcr.io/pause:3.1 quay.io/coreos/flannel:v0.11.0-amd64

#根據maser上 kubeadmin init執行結果的提示,在2台node上分別執行如下命令
# kubeadm join 192.168.100.71:6443 --token rfhs54.1i7ol2gt68pmnsl6 --discovery-token-ca-cert-hash sha256:75e6507e0cd820fae522348f40c9a6fd7318e5ebf34829cebafdec0acc368749

 

說明:

  1)master和node節點上如果 kubeadm執行不成功,或者需要重新執行,需要先使用kubeadm reset 恢復初始狀態

  2)master和node節點上需要開啟kubectl開機自啟動 systemctl enable kubectl, 否則主機重啟后組件類容器不能啟動

 

五、驗證:

1、查看節點信息

kubectl get nodes

[root@master ~]# kubectl get nodes
NAME               STATUS   ROLES    AGE   VERSION
master.perry.com   Ready    master   32h   v1.13.3 node1.perry.com Ready <none> 25h v1.13.3 node2.perry.com Ready <none> 25h v1.13.3

 

六、發布一個service,體驗一下k8s

一個簡單的Demo,創建/發布/擴容/縮容/

部署myapp應用

1、在master創建一個myapp的應用,副本數量為2
# kubectl run myapp --image=ikubernetes/myapp:v1 --replicas=2

可以通過以下一些命令查看應用的狀態等信息
# kubectl get deployment
# kubectl get deployment -w
# kubectl get deployment 
# kubectl get pods -o wide

2、發布應用
# kubectl expose deployment myapp --name=myapp --port 80
# kubectl get svc

3、發布應用,外部可以訪問
# kubectl eiit svc myapp
type: ClusterIP 將 ClusterIP 修改為NodePort

kubectl get svc
在集群外部訪問http://192.168.100.72:32602/

4、擴容myapp應用
# kubectl scale --replicas=5 deployment myapp
# kubectl get pod -o wide

5、縮容myapp應用
# kubectl scale --replicas=3 deployment myapp
# kubectl get pod -o wide

6、滾動更新
# kubectl set image deployment myapp myapp=ikubernetes/myapp:v2

7、查看滾動更新過程
# kubectl rollout status deployment myapp

8、更新完成后,查看鏡像版本
# kubectl describe pods myapp-65899575cd-df62l

9、回滾
# kubectl rollout undo deployment myapp

10、刪除應用
# kubectl delete deployment myapp
# kubectl delete svc myapp

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM