kubernetes 集群部署

kubernetes 集群部署

環境
JiaoJiao_Centos7-1(152.112) 192.168.152.112
JiaoJiao_Centos7-2(152.113) 192.168.152.113
JiaoJiao_Centos7-3(152.114) 192.168.152.114
已開通 4C+8G+80G

集群規劃

?


部署方式

環境準備:基于主機名稱通信,時間同步,關閉firewall和iptables.service

方式一:yum ,rpm 安裝。復雜。

1. etcd cluster :安裝在master節點上2. flannel:安裝在所有節點上
2. 安裝配置master
kube-apiserver,kube-scheduler,kube-controller-manager
3. 安裝配置node
kube-proxy
kubelet

方式二:使用kubeadm工具安裝。簡單。

1. master和node 都用yum 安裝kubelet,kubeadm,docker
2. master 上初始化:kubeadm init
3. master 上啟動一個flannel的pod
4. node上加入集群:kubeadm join

部署步驟

采取方式二:使用kubeadm工具安裝步驟

準備環境

修改主機名(3臺機器都需要修改)

# hostnamectl set-hostname master

配置hosts和dns解析(3臺機器都需要配置)

[root@node02 ~]# cat /etc/hosts
127.0.0.1 node02 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 node02 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.152.112 master
192.168.152.113 node01
192.168.152.114 node02

默認的dns服務器沒法解析到opsx.alibaba.com和mirrors.aliyun.com,使用nameserver 192.168.?.?(具體根據你所在公司環境設置)這個可以。

[root@master ~]# cat /etc/resolv.conf 
# Generated by NetworkManager
nameserver 192.168.?.?

?

關閉防火墻和iptables,檢查iptables配置值是否為1(3臺機器都需要)

# systemctl stop firewalld.service
# systemctl stop iptables.service 
# systemctl disable firewalld.service
[root@master docker]# cat /proc/sys/net/bridge/bridge-nf-call-ip6tables 
1
[root@master docker]# cat /proc/sys/net/bridge/bridge-nf-call-iptables 
1

配置docker yum源

#yum update
#yum install -y yum-utils device-mapper-persistent-data lvm2 wget
#cd /etc/yum.repos.d
#wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

配置kubernetes yum 源

#wget https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
# wget https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
# rpm --import rpm-package-key.gpg
# rpm --import yum-key.gpg
[root@master yum.repos.d]# cat kubernetes.repo 
[kubernetes]
name=Kubernetes Repo
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
enabled=1
# yum repolist

master和node 安裝kubelet,kubeadm,docker

# yum install docker-ce kubelet kubeadm

master 上安裝kubectl ,node節點可以選擇安裝或者不安裝

kubectl 是API server 客戶端程序,通過連接master端的API server來實現k8s對象資源的增刪改查等基本操作。

#yum install kubectl

?

docker的配置

配置私有倉庫和鏡像加速地址

[root@master docker]# cat /etc/docker/daemon.json 
{"registry-mirrors": ["http://295c6a59.m.daocloud.io"],
"insecure-registries":["自己搭建的私有倉庫地址"]}

?

設置代理

[root@master docker]# cat /usr/lib/systemd/system/docker.service |grep -v "^#"
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
BindsTo=containerd.service
After=network-online.target firewalld.service containerd.service
Wants=network-online.target
Requires=docker.socket
[Service]
Type=notify
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
#設置代理地址,和不讓代理的地址
Environment="HTTPS_PROXY=http://www.ik8s.io:10080" "NO_PROXY=localhost,127.0.0.1,192.168.152.0/24"
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process
[Install]
WantedBy=multi-user.target

?

啟動docker

# systemctl daemon-reload 
# systemctl start docker 
[root@master docker]# docker info 
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 18.09.6
Storage Driver: overlay2
Backing Filesystem: xfs
Supports d_type: true
Native Overlay Diff: false
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: bb71b10fd8f58240ca47fbb579b9d1028eea7c84
runc version: 2b18fe1d885ee5083ef9f0838fee39b62d653e30
init version: fec3683
Security Options:
seccomp
Profile: default
Kernel Version: 3.10.0-514.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 7.64GiB
Name: master
ID: KEBQ:4XXU:LTA7:J5QH:HK4F:JS26:RKI4:YFPJ:RY45:Q647:SJI6:VZDQ
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
HTTPS Proxy: http://www.ik8s.io:10080 #代理地址
No Proxy: localhost,127.0.0.1,192.168.152.0/24
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
XXXXX #本公司私有庫地址
127.0.0.0/8
Registry Mirrors:
http://295c6a59.m.daocloud.io/ #鏡像加速地址
Live Restore Enabled: false
Product License: Community Engine 
# systemctl enable docker

?

master 上初始化:kubeadm init

修改配置文件,忽略swap報錯

[root@master docker]# cat /etc/sysconfig/kubelet 
KUBELET_EXTRA_ARGS="--fail-swap-on=false"

?

初始化

#kubeadm init [command] --help 可以先查看下幫助
# kubeadm init --kubernetes-version=v1.14.2 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap--kubernetes-version=v1.14 # k8s的版本
版本通過:https://github.com/kubernetes/kubernetes/releases 來確定你需要的版本。
--pod-network-cidr=10.244.0.0/16 #pod網絡。flannel 的默認是10.244.0.0/16
--service-cidr=10.96.0.0/12 # service 網絡,也是用了默認值
--ignore-preflight-errors=Swap #忽略Swap報錯[root@master ~]# kubeadm init --kubernetes-version=v1.14.2 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap
[init] Using Kubernetes version: v1.14.2
[preflight] Running pre-flight checks
[WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". Please follow the guide at https://kubernetes.io/docs/setup/cri/
[WARNING Swap]: running with swap on is not supported. Please disable swap
[WARNING Service-Kubelet]: kubelet service is not enabled, please run 'systemctl enable kubelet.service'
[preflight] Pulling images required for setting up a Kubernetes cluster
[preflight] This might take a minute or two, depending on the speed of your internet connection
[preflight] You can also perform this action in beforehand using 'kubeadm config images pull'
error execution phase preflight: [preflight] Some fatal errors occurred:
[ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-apiserver:v1.14.2: output: Error response from daemon: Get https://k8s.gcr.io/v2/: proxyconnect tcp: dial tcp 172.96.236.117:10080: connect: connection refused
, error: exit status 1
[ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-controller-manager:v1.14.2: output: Error response from daemon: Get https://k8s.gcr.io/v2/: proxyconnect tcp: dial tcp 172.96.236.117:10080: connect: connection refused
, error: exit status 1
[ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-scheduler:v1.14.2: output: Error response from daemon: Get https://k8s.gcr.io/v2/: proxyconnect tcp: dial tcp 172.96.236.117:10080: connect: connection refused
, error: exit status 1

?

報錯了。拉不到鏡像。
解決辦法:docker.io倉庫對google的容器做了鏡像,可以通過下列命令下拉取相關鏡像

#docker pull mirrorgooglecontainers/kube-apiserver:v1.14.2
#docker pull mirrorgooglecontainers/kube-controller-manager:v1.14.2
#docker pull mirrorgooglecontainers/kube-scheduler:v1.14.2
#docker pull mirrorgooglecontainers/kube-proxy:v1.14.2
#docker pull mirrorgooglecontainers/pause:3.1
#docker pull mirrorgooglecontainers/etcd:3.3.10
#docker pull coredns/coredns:1.3.1


通過docker tag命令來修改鏡像的標簽:

# docker tag mirrorgooglecontainers/kube-apiserver:v1.14.2 k8s.gcr.io/kube-apiserver:v1.14.2
# docker tag mirrorgooglecontainers/kube-controller-manager:v1.14.2 k8s.gcr.io/kube-controller-manager:v1.14.2
# docker tag mirrorgooglecontainers/kube-scheduler:v1.14.2 k8s.gcr.io/kube-scheduler:v1.14.2 
# docker tag mirrorgooglecontainers/kube-proxy:v1.14.2 k8s.gcr.io/kube-proxy:v1.14.2 
# docker tag mirrorgooglecontainers/pause:3.1 k8s.gcr.io/pause:3.1 
# docker tag mirrorgooglecontainers/etcd:3.3.10 k8s.gcr.io/etcd:3.3.10
# docker tag coredns/coredns:1.3.1 k8s.gcr.io/coredns:1.3.1 


初始化過程中有提示,請按照提示進行操作并且將下面內容保存下來。

kubeadm join 192.168.152.112:6443 --token qlu35g.rfxl6k8mvry8nxfp \
> --discovery-token-ca-cert-hash sha256:8febc1b1402b471187e55186b4c3937ac23cfe830fb6ccfbd2e9f212e011218d

部署網絡:master 上啟動一個flannel的pod

下載鏡像。由于不能直接下載官方鏡像,自己百度找了個地址:

#docker pull jmgao1983/flannel:v0.11.0-amd64
#docker tag jmgao1983/flannel:v0.11.0-amd64 quay.io/coreos/flannel:v0.11.0-amd64
#docker rmi jmgao1983/flannel:v0.11.0-amd64

啟動:

# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

檢查下:

[root@master ~]# kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-fb8b8dccf-f7db6 1/1 Running 0 53m
coredns-fb8b8dccf-sd8hk 1/1 Running 0 53m
etcd-master 1/1 Running 0 52m
kube-apiserver-master 1/1 Running 0 52m
kube-controller-manager-master 1/1 Running 0 52m
kube-flannel-ds-amd64-zq5zr 1/1 Running 0 19m
kube-proxy-8mtbc 1/1 Running 0 53m
kube-scheduler-master 1/1 Running 0 52m


到此,master 就安裝好了!?保存鏡像

docker save -o master.tar k8s.gcr.io/kube-proxy:v1.14.2 k8s.gcr.io/kube-apiserver:v1.14.2 k8s.gcr.io/kube-controller-manager:v1.14.2 k8s.gcr.io/kube-scheduler:v1.14.2 quay.io/coreos/flannel:v0.11.0-amd64 k8s.gcr.io/coredns:1.3.1 k8s.gcr.io/etcd:3.3.10 k8s.gcr.io/pause:3.1

?

node節點加入集群

將master上保存的鏡像同步到節點上

[root@master ~]#scp master.tar node01:/root/
[root@master ~]#scp master.tar node02:/root/

將鏡像導入本地

[root@node01 ~]# docker load< master.tar

修改配置,忽略報錯:

[root@node01 docker]# cat /etc/sysconfig/kubelet 
KUBELET_EXTRA_ARGS="--fail-swap-on=false"

執行加入集群命令

[root@node01 ~]# kubeadm join 192.168.152.112:6443 --token qlu35g.rfxl6k8mvry8nxfp --discovery-token-ca-cert-hash sha256:8febc1b1402b471187e55186b4c3937ac23cfe830fb6ccfbd2e9f212e011218d --ignore-preflight-errors=Swap

在master上查看節點情況

[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready master 107m v1.14.2
node01 Ready <none> 23m v1.14.2
node02 Ready <none> 23m v1.14.2

?

轉載于:https://www.cnblogs.com/zoujiaojiao/p/10986320.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/251687.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/251687.shtml
英文地址,請注明出處:http://en.pswp.cn/news/251687.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PHP學習筆記--抽象類和抽象方法的應用

抽象類** 什么是抽象方法&#xff1f;** 定義&#xff1a;如果一個類中的方法&#xff0c;沒有方法體的方法就是抽象方法(就是一個方法沒有使用{}而直接使用分號結束)* * abstract function test(); //抽象方法* * function test(){ //有方法體…

wordpress 顯示數學公式 (MathJax-LaTeX)

blog 不放一堆數學公式怎么能顯得高大上&#xff0c;所以 MathJax-LaTeX 也是必裝的插件之一了。 一、安裝 MathJax-LaTex 插件 直接在 wordpress 插件中&#xff0c;搜索并安裝 MathJax-LaTeX 二、安裝本地 MathJax 服務 不過由默認的 MathJax cdn 服務經常被墻&#xff0c;所…

長春理工大學第十四屆程序設計競賽(重現賽)F.Successione di Fixoracci

鏈接&#xff1a;https://ac.nowcoder.com/acm/contest/912/F 題意&#xff1a; 動態規劃(Dynamic programming&#xff0c;簡稱dp)是一種通過把原問題分解為相對簡單的子問題的方式求解復雜問題的方法。例如&#xff0c;假設小x一步能爬1層或2層臺階&#xff0c;求小x爬n層臺階…

ConstraintLayout

ConstraintLayout使用筆記 具體使用參考&#xff1a;http://blog.csdn.net/guolin_blog/article/details/53122387 ConstraintLayout 好處還是很明顯&#xff0c;確實可以減少嵌套。性能對比參閱&#xff1a;http://www.cnblogs.com/liujingg/p/7161319.html 簡單嵌套Constrain…

css權重

權重大小 內嵌權重為1000 <p style"color: yellow;">ALEX</p> id選擇器的權重為100&#xff0c;類選擇器的權重為10&#xff0c;標簽選擇器的權重為1. /*1 1 1*/ #box1 .wrap2 p{color: red; }當權重一樣的時候&#xff0c;是以后設置的屬性為準&#xf…

手機兩列布局,正方形

手機兩列布局&#xff0c;正方形。 直接貼出調試網站的結果&#xff0c;閱讀效果還不錯。 轉載于:https://www.cnblogs.com/blogzhang/p/11002428.html

python(5)- 基礎數據類型

一 int 數字類型 #abs(x)      返回數字的絕對值&#xff0c;如abs(-10) 返回 10 # ceil(x)    返回數字的上入整數&#xff0c;如math.ceil(4.1) 返回 5 # cmp(x, y)    如果 x < y 返回 -1, 如果 x y 返回 0, 如果 x > y 返回 1 # exp(x)…

B s

666 轉載于:https://www.cnblogs.com/lovelgx/articles/9099239.html

基于HTK的語音撥號系統

為什么80%的碼農都做不了架構師&#xff1f;>>> 基于 HTK 的語音撥號系統 Veket NWPU 2011-6-22 目標&#xff1a; 該系統能夠識別連續說出的數字串和若干組姓名。建模是針對子詞&#xff08; sub-word,eg.. 音素&#xff09;&#xff0c;具有一定的…

MySQL無法重啟問題解決Warning: World-writable config file '/etc/my.cnf' is ignored

為什么80%的碼農都做不了架構師&#xff1f;>>> 今天幫朋友維護服務器&#xff0c;在關閉數據庫的命令發現mysql關不了&#xff0c;提示Warning: World-writable config file /etc/my.cnf is ignored &#xff0c;大概意思是權限全局可寫&#xff0c;任何一個用戶都…

用戶體驗分析: 以 “南通大學教務管理系統微信公眾號” 為例

基于實例分析&#xff0c;體會用戶體驗設計的 7 條準則&#xff0c;分析“南通大學教務管理系統微信公眾號” 在用戶體驗設計方面讓你覺得滿意的地方&#xff08;不少于2點&#xff09;&#xff1b;&#xff08;20分&#xff09;&#xff0c;請陳述理由。 同樣&#xff0c;分析…

JVM學習筆記(一):Java內存區域

由于Java程序是交由JVM執行的&#xff0c;所以我們在談Java內存區域劃分的時候事實上是指JVM內存區域劃分。在討論JVM內存區域劃分之前&#xff0c;先來看一下Java程序具體執行的過程&#xff1a; 首先Java源代碼文件(.java后綴)會被Java編譯器編譯為字節碼文件(.class后綴)&am…

EdgeRouter X設置外網遠程訪問和HTTPS連接指定出口網關

EdgeRouter X雖然小巧&#xff0c;但功能強大&#xff0c;為方便遠程管理&#xff0c;必須對防火墻進行設置&#xff0c;允許從外部進行訪問&#xff0c;由于公網的80、443端口都已被運營商關閉&#xff0c;必須設置端口轉發才能從外部訪問。一、設置外網遠程訪問通過瀏覽器進入…

overflow妙用--去除默認滾動條,內容仍可滾動

在開發中我們往往要去除默認滾動條&#xff0c;但是其在豎直方向的滾動效果仍然需要。 <div id"parent"><div id"child"><h1>文本區</h1><h1>文本區</h1><h1>文本區</h1></div> </div> #pare…

數據倉庫基礎(二)ETL

本文轉載自&#xff1a;http://www.cnblogs.com/evencao/archive/2013/06/14/3135529.html ETL在數據倉庫中具有以下的幾個特點&#xff1a; 數據流動具有周期性&#xff1a; 因為數據倉庫中的數據量巨大&#xff0c;一般采用成熟的ETL工具去完成抽取、轉換、加載&#xff0c;以…

CSV出力ボタンラッパー(asp.net)[イベントの作り方に役立つ]

為什么80%的碼農都做不了架構師&#xff1f;>>> /// <summary> /// CSV出力ボタンラッパー。 /// </summary> public class CsvOutputButtonWrapper { /// <summary> /// CSV出力ボタン /// </summary> …

結構體變量字節填充

二&#xff1a; &#xff08;1&#xff09;sizeof也可以對一個函數調用求值&#xff0c;其結果是函數返回類型的大小&#xff0c;函數并不會被調用。 &#xff08;2&#xff09;終于搞懂struct結構體內存分配問題了&#xff0c;結構體中各個成員字節對齊遵循以下幾個原則&#…

iOS GoldRaccoon第三方FTP文件夾下載失敗原因

一、問題描述&#xff1a;1.下載失敗報錯&#xff1a; 文件寫入失敗Error DomainNSCocoaErrorDomain Code512 "未能將文件“jquery_1_10_2_min.js”存儲到文件夾“Q20180104153006399”中。" 原因及解決方法&#xff1a;文件夾下均為文件&#xff0c;不包含子文件夾&…

項目UML設計(團隊)

團隊信息 隊名&#xff1a;massivehard 組長&#xff1a;曉輝 隊員&#xff1a;一飛&#xff0c;帥珍&#xff0c;斌豪&#xff0c;錦謀 團隊分工 模塊序號模塊名模塊具體內容1日記編輯添加隨筆2照片選擇選擇照片識別3消息模塊收發消息4個人信息賬號&#xff0c;密碼等負責人分…

安裝asp.net mvc4后mvc3項目編譯報錯

為什么80%的碼農都做不了架構師&#xff1f;>>> 安裝asp.net mvc4之后&#xff0c;之前的mvc3項目編譯時報這個錯“The type System.Web.Mvc.ModelClientValidationRule exists in both c:\Program Files\Microsoft ASP.NET\ASP.NET MVC 3\Assemblies\System.Web.M…